OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5140|回复: 0

N32G45XVL-STB开发板试用(国民技术)- 4 (分享: GPIO)

[复制链接]

44

主题

187

帖子

0

精华

高级会员

Rank: 4

积分
563
金钱
563
注册时间
2016-9-28
在线时间
158 小时
发表于 2022-12-18 17:37:25 | 显示全部楼层 |阅读模式
本帖最后由 mftang2016 于 2022-12-18 18:10 编辑

源代码和开发文档地址:
https://gitee.com/mftang/n32-g45-xvl-stb.git


6 GPIO
6.1 需求
配置GPIO 控制UG_N32G45XVL-STB开发板 上的3个LED指示灯

1670940359597.png

6.2 硬件分析
UG_N32G45XVL-STB开发板 上的3个LED和MCU 对应IO如下, 当IO为高电平时,点亮LED
1671351255371.png


IO特性分析
1671351393994.png
6.3 软件实现6.3.1 IO 参数配置接口
  1. // io 初始化接口
  2. void gpio_Init(GPIO_Module* GPIOx, uint16_t Pin)
  3. {
  4.     GPIO_InitType GPIO_InitStructure;

  5.     /* Check the parameters */
  6.     assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

  7.     /* Enable the GPIO Clock */
  8.     if (GPIOx == GPIOA)
  9.     {
  10.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
  11.     }
  12.     else if (GPIOx == GPIOB)
  13.     {
  14.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);
  15.     }
  16.     else if (GPIOx == GPIOC)
  17.     {
  18.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE);
  19.     }
  20.     else if (GPIOx == GPIOD)
  21.     {
  22.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOD, ENABLE);
  23.     }
  24.     else if (GPIOx == GPIOE)
  25.     {
  26.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOE, ENABLE);
  27.     }
  28.     else if (GPIOx == GPIOF)
  29.     {
  30.         RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOF, ENABLE);
  31.     }
  32.     else
  33.     {
  34.         if (GPIOx == GPIOG)
  35.         {
  36.             RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOG, ENABLE);
  37.         }
  38.     }

  39.     /* Configure the GPIO pin */
  40.     if (Pin <= GPIO_PIN_ALL)
  41.     {
  42.         GPIO_InitStructure.Pin        = Pin;
  43.         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
  44.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  45.         GPIO_InitPeripheral(GPIOx, &GPIO_InitStructure);
  46.     }
  47. }
复制代码


6.3.2 LED控制接口
  1. /**
  2. * @brief  Turns selected Led on.
  3. * @param GPIOx x can be A to G to select the GPIO port.
  4. * @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
  5. */
  6. void LedOn(GPIO_Module* GPIOx, uint16_t Pin)
  7. {
  8.     GPIOx->PBSC = Pin;
  9. }
  10. /**
  11. * @brief  Turns selected Led Off.
  12. * @param GPIOx x can be A to G to select the GPIO port.
  13. * @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
  14. */
  15. void LedOff(GPIO_Module* GPIOx, uint16_t Pin)
  16. {
  17.     GPIOx->PBC = Pin;
  18. }
  19. /**
  20. * @brief  Turns selected Led on or off.
  21. * @param GPIOx x can be A to G to select the GPIO port.
  22. * @param Pin This parameter can be one of the following values:
  23. *  @arg GPIO_PIN_0~GPIO_PIN_15: set related pin on
  24. *  @arg (GPIO_PIN_0<<16)~(GPIO_PIN_15<<16): clear related pin off
  25. */
  26. void LedOnOff(GPIO_Module* GPIOx, uint32_t Pin)
  27. {
  28.     GPIOx->PBSC = Pin;
  29. }
  30. /**
  31. * @brief  Toggles the selected Led.
  32. * @param GPIOx x can be A to G to select the GPIO port.
  33. * @param Pin This parameter can be GPIO_PIN_0~GPIO_PIN_15.
  34. */
  35. void LedBlink(GPIO_Module* GPIOx, uint16_t Pin)
  36. {
  37.     GPIOx->POD ^= Pin;
  38. }
复制代码
6.3.3 测试代码
初始化代码
  1. /*******************************************************************************
  2. Board LED IO
  3. *******************************************************************************/
  4. #define  GPIO_LED1                GPIOA
  5. //#define  GPIO_LED2                GPIOB
  6. #define  GPIO_LED3                GPIOB

  7. #define  PIN_LED1                 GPIO_PIN_8
  8. //#define  PIN_LED2                 GPIO_PIN_4
  9. #define  PIN_LED3                 GPIO_PIN_5

  10. #define  RCC_LED1_GPIO_CLK       RCC_APB2_PERIPH_GPIOA
  11. #define  RCC_LED3_GPIO_CLK       RCC_APB2_PERIPH_GPIOB

  12. static void Board_GPIO_Configuration(void)
  13. {
  14.     /* initial LED gpio port */
  15.     gpio_Init( GPIO_LED1, PIN_LED1);
  16.     gpio_Init( GPIO_LED3, PIN_LED3);
  17.    
  18.     // all led on
  19.     LedOn( GPIO_LED1, PIN_LED1);
  20.     LedOn( GPIO_LED3, PIN_LED3);
  21. }
复制代码
在定时器中实现LED控制 ,1 hz  闪烁频率
  1. static int count;
  2. void TIM1_UP_IRQHandler(void)
  3. {
  4.     if (TIM_GetIntStatus(TIM1, TIM_INT_UPDATE) != RESET)
  5.     {
  6.         TIM_ClrIntPendingBit(TIM1, TIM_INT_UPDATE);
  7.         if( (count % 1000 ) == 0 )
  8.         {
  9.            LedBlink(GPIO_LED3, PIN_LED3);
  10.         }
  11.          count ++;  
  12.     }
  13. }
复制代码











1670939419079.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 20:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表