STM32 cubeMX + keil5 HAL库 GPIO高低点平控制

设备型号: STM32F103C6F6

 

 

 

每个GPIO针脚都所属一个分区(GPIOA、GPIOB、GPIOC、GPIOD),每个分区下有16个针脚,所以第二个参数是0-15

 

 

 上图是cubeMX配置界面, 例如PC13(P=针脚,C=GPIOC,3=位置3)针脚,属于GPIOC区,位置13(上图核心板自带LED),通过控制高低点平,控制LED灯开关。再比如PD0,属于GPIOD区, 0位置

核心板自带LED标记:

 

 

 PWR: 电源指示

PC13:板载LED针脚位置,GPIOC区,13位置

 

HAL 库高低点平相关API

 GPIO_PinState:

typedef enum
{
  GPIO_PIN_RESET = 0u,//低电平
  GPIO_PIN_SET//高电平
} GPIO_PinState;

读取指定针脚高低点平:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

参数一: GPIO所在分区,一般分为GPIOA、GPIOB、GPIOC、GPIOD等

参数二: 针脚位置 0-15

返回 GPIO_PinState 枚举: GPIO_PIN_RESET 低电平, GPIO_PIN_SET 高电平

设置指定针脚高低点平:

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

参数一:  GPIO所在分区

参数二: 针脚位置 0-15

参数三: 置高/低点平(GPIO_PIN_RESET / GPIO_PIN_SET)

例如,设置PA12为高电平,前提需要在cubeMX中配置PA12 GPIO Output,或代码中配置 GPIO Output:

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);

 针脚位置,要使用cubeMX生成代码时,在stm32f1xx_hal_gpio.h中声明的针脚定义:

#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 */

 

 

kiel5 仿真中,查看高低点平:

设置Debug参数:

 

 

 

 

设置CPU 和Driver 的Dialog DLL, Dialog DLL分别为: DARMSTM.DLL,TARMSTM.DLL,参数为: -pSTM32F103RC

 

 

 2. 开始调试:

Debug -> Start/Stop Debug Session(Ctrl + F5)

 

 

跳过断点执行,具体Debug 操作请自行百度。

查看针脚高低点平状态:

一定要按照上图配置好Dialog DLL,和参数,否则没有General Purpose I/O菜单!!!

Peripherals -> General Purpose I/O -> GPIOC(针脚所在分区,想查看的针脚所在分区)

 

 

 

 已使能针脚,在打钩时,表示高电平,未打钩时表示低电平

 

posted @ 2021-11-28 00:17  耿明岩  阅读(1550)  评论(0编辑  收藏  举报
希望能帮助到你,顺利解决问题! ...G(^_−)☆