[STM32L0] 看了一下stm32l0xx_nucleo_32.c文件 有些东西可以借鉴

[复制链接]
846|16
 楼主| hanzhen654 发表于 2020-3-19 22:37 | 显示全部楼层 |阅读模式
这里的LED 初始化 看了一下,封装方式可以借鉴啊
  1. void BSP_LED_Init(Led_TypeDef Led)
  2. {
  3.   GPIO_InitTypeDef  GPIO_InitStruct;
  4.   
  5.   /* Enable the GPIO_LED Clock */
  6.   LEDx_GPIO_CLK_ENABLE(Led);

  7.   /* Configure the GPIO_LED pin */
  8.   GPIO_InitStruct.Pin = LED_PIN[Led];
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  10.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  12.   
  13.   HAL_GPIO_Init(LED_PORT[Led], &GPIO_InitStruct);
  14.   HAL_GPIO_WritePin(LED_PORT[Led], LED_PIN[Led], GPIO_PIN_RESET);
  15. }


 楼主| hanzhen654 发表于 2020-3-19 22:39 | 显示全部楼层
可以直接在使用 BSP_LED_Init(LED3);对板卡的LD3进行初始化。这里有个疑惑Led_TypeDef 是个什么东西?
 楼主| hanzhen654 发表于 2020-3-19 22:41 | 显示全部楼层
在stm32l0xx_nucleo_32.h文件中看到了 定义的Led_TypeDef
51625e7384a86e359.png
 楼主| hanzhen654 发表于 2020-3-19 22:51 | 显示全部楼层
原来是一个 枚举啊,不过为什么要这么做,初始化里一堆【led】,我蒙了
893615e7386dced72c.png
 楼主| hanzhen654 发表于 2020-3-19 23:04 | 显示全部楼层
我自己也仿写了一个使用枚举来点亮不同LED的C代码
  1. #include<stdio.h>

  2. typedef enum
  3. {
  4.   LED1 = 1,
  5.   LED2 = 2,
  6.   LED3 = 3
  7. }led_TypeDef;

  8. //LED点亮函数
  9. void LED_ON(led_TypeDef led)
  10. {
  11.         switch(led)
  12.         {
  13.                 case LED1:
  14.                         printf("this is LED1 is on\r\n");
  15.                 return;
  16.                 case LED2:
  17.                         printf("this is LED2 is on\r\n");
  18.                 return;
  19.                 case LED3:
  20.                         printf("this is LED3 is on\r\n");
  21.                 return;
  22.         }
  23. }


 楼主| hanzhen654 发表于 2020-3-19 23:08 | 显示全部楼层
问题比较多,有一个地方又看不懂了,LED_PIN[led]  是什么鬼,我**中都是 GPIO_PIN_3 这种形式
587835e738a891b772.png
 楼主| hanzhen654 发表于 2020-3-19 23:11 | 显示全部楼层
F11 跳转到 LED_PI[] 定义处, const uint16_t LED_PIN[LEDn] = {LED3_PIN}; 原来直接等于 LED3_PIN,出现的LEDn和 LED3_PIN都在这里定义了
727645e738bb05d008.png
 楼主| hanzhen654 发表于 2020-3-19 23:14 | 显示全部楼层
如果这里的LEDn不是 1是3的话,那个红需要更改了,好奇,于是我想找一下官方的板卡 有多个LED的,看一下问价你怎么写的。
 楼主| hanzhen654 发表于 2020-3-20 11:13 | 显示全部楼层
于是我打开了ST提供的 stm32l0538_discovery.c和stm32l0538_discovery.h文件,这里的LEDn的数量为2  包括了LED3和LED4
910015e7434d575021.png
 楼主| hanzhen654 发表于 2020-3-20 11:15 | 显示全部楼层
同样的,在定义 Led_TypeDef 枚举类型中添加了LED4
3565e74352f15bbe.png
 楼主| hanzhen654 发表于 2020-3-20 11:17 | 显示全部楼层
精彩的地方来了,我们再来看 LED_PIN[LEDn]  数组是如何写的
959295e7435c76cc9c.png
 楼主| hanzhen654 发表于 2020-3-20 11:26 | 显示全部楼层
这样我们就可以不限制的添加我们自己板卡的LED的数量了
  1. #define  LEDn           3    //定义板卡LED的数量
  2. #define  LED1_PIN       GPIO_PIN1
  3. #define  LED2_PIN       GPIO_PIN2
  4. #define  LED3_PIN       GPIO_PIN3

  5. const unsigned int GPIO_Pin[LEDn] = {LED1_PIN,LED2_PIN,LED3_PIN};

  6. typedef enum
  7. {
  8.   LED1 = 0,
  9.   LED2 = 1,
  10.   LED3 = 2
  11. }led_TypeDef;


八层楼 发表于 2020-4-6 18:26 | 显示全部楼层
非常感谢楼主分享
观海 发表于 2020-4-6 18:26 | 显示全部楼层
非常感谢楼主分享
guanjiaer 发表于 2020-4-6 18:26 | 显示全部楼层
非常感谢楼主分享
heimaojingzhang 发表于 2020-4-6 18:26 | 显示全部楼层
非常感谢楼主分享
keaibukelian 发表于 2020-4-6 18:26 | 显示全部楼层
非常感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

1766

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部