zoukankan      html  css  js  c++  java
  • 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(针脚所在分区,想查看的针脚所在分区)

     

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

  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/GengMingYan/p/15614068.html
Copyright © 2011-2022 走看看