当前位置:   article > 正文

[STM32 HAL]立创天空星开发板STM32F407VET6开发过程1——LED使用结构体方式实现_stm32f407天空星拓展版

stm32f407天空星拓展版

前言: 由于立创搞活动19.9 ,我就搞了一个立创的开发板(ps: 实际上是加运费28.9)。想着来学习一下。

我写代码很少废话的,接下来是开门见山的东西。

立创·梁山派·天空星开发文档icon-default.png?t=N7T8https://lceda001.feishu.cn/wiki/QaWRwow7TiXHhgkwF5mcxZLsne7

目录

图片展示

一、创建工程

New一个工程

进行基础的参数修改

时钟树配置

配置LED引脚与WK_UP 

工程生成

二、接下来是KEIL环节

代码环节

定义结构体 

构建LED函数

初始化结构体

代码测试

编译&烧录

结果展示


-------------------------------------------------------分隔符--------------------------------------------------------------

一、创建工程

这里使用的是CubeMX进行工程构建,官方的是标准库。 

New一个工程

进行基础的参数修改

将Debug给选择成串口线,用的是啥勾选啥。有些朋友用的是Jlink呢?

时钟树配置

注意: 小心这里,开发板上面的是8MHz 的晶振 

 反正就是左边的input输入频率写8,右边的时钟写80,168,都可以,只要选择HSE和PLLCLK就行

配置LED引脚与WK_UP 

根据给出的原理图可以知道LED和按键KEY都有一个下拉电阻所以可以配置成以下

注意哦,LED和KEY都是接的低电平,默认低电平。所以后面检测和赋值都是给高电平才是点亮和按下去

工程生成

配置好之后就可以进行工程生成了

命名和路径自定义,IDE选择自己使用的那一个,比如我用的是KEIL所以选择MDK-ARM。最低版本选择V5就可以我这偷懒就默认5.32。

这个选择仅复制必要的文件和勾选生成独立的.c/.h文件。到这工程配置结束。

二、KEIL环节

选择你所使用的调试器,我使用的是DAP_Link所以选择CMSIS DAP,选择后点击右边的Settings

然后打开如图界面勾选Reset and Run,也就是点击烧录后会直接运行程序。

代码环节

其实我没使用到按键,但是按键检测大家都会吧??? 

注意将代码写到CODE BEBIN和CODE END里面,不然后续再次生成的时候会被覆盖

定义结构体 

  1. // 在main.c找到如下位置,构造LED结构体
  2. /* Private typedef -----------------------------------------------------------*/
  3. /* USER CODE BEGIN PTD */
  4. // 定义 LED 控制结构体
  5. typedef struct
  6. {
  7. void (*On)(GPIO_TypeDef *, uint16_t); // 点亮 LED 的函数指针
  8. void (*Off)(GPIO_TypeDef *, uint16_t); // 熄灭 LED 的函数指针
  9. void (*Toggle)(GPIO_TypeDef *, uint16_t); // 翻转 LED 的函数指针
  10. void (*Loop)(GPIO_TypeDef *, uint16_t, uint16_t); // 循环点亮与熄灭 LED 的函数指针
  11. } LED_Control;
  12. /* USER CODE END PTD */

构建LED函数

结构体里所需要的有如下函数

  1. // main.c 找到这个 USER CODE BEGIN 0
  2. /* Private user code ---------------------------------------------------------*/
  3. /* USER CODE BEGIN 0 */
  4. // LED 点亮函数
  5. void LED_On(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin) {
  6. HAL_GPIO_WritePin(GPIOx, LEDx_Pin, GPIO_PIN_SET);
  7. }
  8. // LED 熄灭函数
  9. void LED_Off(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin) {
  10. HAL_GPIO_WritePin(GPIOx, LEDx_Pin, GPIO_PIN_RESET);
  11. }
  12. // 翻转 LED 的函数
  13. void LED_Toggle(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin)
  14. {
  15. HAL_GPIO_TogglePin(GPIOx, LEDx_Pin);
  16. }
  17. // 循环点亮与熄灭 LED 的函数
  18. void LED_Loop(GPIO_TypeDef * GPIOx, uint16_t LEDx_Pin, uint16_t Delay)
  19. {
  20. HAL_GPIO_TogglePin(GPIOx, LEDx_Pin);
  21. HAL_Delay(Delay);
  22. }
  23. /* USER CODE END 0 */

这个代码好不好取决于你的LED多不多,反正我自己很少会用这个结构体来写这种简单的东西,加上这个板子只有一个LED,这样写确实挺浪费。不过这个教程主要是写如何使用结构体做某事。 

初始化结构体

  1. // main.c 上面有LED的各种函数
  2. LED_Control LED =
  3. {
  4. .On = LED_On,
  5. .Off = LED_Off,
  6. .Toggle = LED_Toggle,
  7. .Loop = LED_Loop
  8. };
  9. /* USER CODE END 0 */
代码测试

使用这个结构体的Loop进行测试

  1. // main.c 找到main函数里的while循环
  2. /* Infinite loop */
  3. /* USER CODE BEGIN WHILE */
  4. while (1)
  5. {
  6. LED.Loop(GPIOB, LED1_Pin, 200);
  7. //使用LED的Loop方法(第一个参数写引脚在哪个区,第二个参数写引脚在第几个位置, 第三个是循环闪烁一次的延时时间)
  8. /* USER CODE END WHILE */
  9. /* USER CODE BEGIN 3 */
  10. }
  11. /* USER CODE END 3 */

编译&烧录

最后编译,并下载烧录

最后的最后

结果展示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/713375
推荐阅读
相关标签
  

闽ICP备14008679号