您的位置:首页 > 健康 > 养生 > 南京网站定制公司_企业品牌网站有哪些_产品线上推广渠道_合肥网络推广优化公司

南京网站定制公司_企业品牌网站有哪些_产品线上推广渠道_合肥网络推广优化公司

2025/2/15 10:26:30 来源:https://blog.csdn.net/pyh1322712308/article/details/145107317  浏览:    关键词:南京网站定制公司_企业品牌网站有哪些_产品线上推广渠道_合肥网络推广优化公司
南京网站定制公司_企业品牌网站有哪些_产品线上推广渠道_合肥网络推广优化公司

一、点亮LED1

1. 引脚分析

我们查看引脚,LED1对应引脚位PC8,共阳极,需要低电平点亮,高电平熄灭。

PD2为控制锁存器,高电平将PC8~PC15端口状态传送至1Q~8Q;低电平左侧1Q~8Q端口状态锁定。当然,要让PD2高电平,使得LED点亮。

2. CubeMX 配置引脚属性

将PC8和PD2 引脚全部配置为 GPIO_Ouput,初始电平为高电平。

即PC8上电后LED1熄灭,PD2使得芯片两端导通。

3. 编写代码

需要的HAL库函数

配置引脚电平状态

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{/* Check the parameters */assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if (PinState != GPIO_PIN_RESET){GPIOx->BSRR = (uint32_t)GPIO_Pin;}else{GPIOx->BRR = (uint32_t)GPIO_Pin;}
}

参数说明:
    GPIOx:端口号 GPIOA,GPIOB,GPIOC
    GPIO_Pin:引脚号 GPIO_PIN_0,GPIO_PIN_1,GPIO_PIN_2 ...
    GPIO_PinState PinState:要配置的状态 GPIO_PIN_SET , GPIO_PIN_RESET

通过写入GPIO端口的BSRR或BRR寄存器,可以快速地设置或复位引脚状态。

反转引脚电平

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{uint32_t odr;/* Check the parameters */assert_param(IS_GPIO_PIN(GPIO_Pin));/* get current Output Data Register value */odr = GPIOx->ODR;/* Set selected pins that were at low level, and reset ones that were high */GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
}

延时 Delay 毫秒

void HAL_Delay(uint32_t Delay)

主函数

/* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);//点亮LED1//HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);//翻转PCB8电平//HAL_Delay(1000);//延时1秒}/* USER CODE END 3 */

PC8也就是,GPIOC端口的8号引脚。

编译错误,有可能是编译器的版本问题。

二、控制所有LED

1. CubeMX 配置所有引脚

将PC9~PC15也配置为GPIO_Output,初始化为高电平。

2. 代码编写

查看引脚定义

#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */

这16个引脚,其实就是相邻的位进行左移得到的。

如果要控制多个LED,那么将多个LED所对应的十六进制数取或即可。

例如要点亮LD1和LD5

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
//0001 0001
uint8_t ucled=0x11;while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_GPIO_WritePin(GPIOC,ucled<<8,GPIO_PIN_RESET);}/* USER CODE END 3 */
}

三、引脚冲突

当需要用到 LCD 时,PC8~PC15 就会发生冲突。

需要将 PD2 初始为低电平,使得锁存器两端不导通。

需要 LED 时,再将 PD2 置为高电平,将 PC8~PC15 端口状态传送到 1Q~8Q,再配置为低电平。

void Led_Disp(uint8_t ucled)
{HAL_GPIO_WritePin(GPIOC,0xFF<<8,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);	// PD2 HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOC,ucled<<8,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com