STM32学习笔记之点亮LED灯

转载于 http://blog.csdn.net/u010661782/article/details/50281229,感谢原作者非常详细的指导学习。

让我的开发板的LED灯亮灭闪烁


实验程序:

[cpp]  view plain  copy
  1. /*******************************led.c*********************************/  
  2. #include "stm32f4xx.h"  //在SYSTEM目录下可以找到,把ST官方的部分库抽取出来,组成了一个SYSTEM目录  
  3. #include "sys.h"  
  4.   
  5.   
  6. void LED_Init(void){  
  7.   
  8. RCC->AHB1ENR = 1<<5;  //使能GPIO端口的F时钟  
  9.   
  10. /* 
  11. 方法一: 
  12. */  
  13. // GPIOF->ODR |= 0x1<<9;  
  14. // GPIOF->MODER |= 0x1 << 18;  
  15.   
  16. /* 
  17. 方法二: 
  18. */  
  19. //在sys.h中可以看到GPIO_Set()函数  
  20. //void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD);//GPIO设置函数    
  21. GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_25M,GPIO_PUPD_PU);  
  22. PFout(9) = 1;  
  23. PFout(10) = 1;  
  24.   
  25.   
  26. }  


[cpp]  view plain  copy
  1. /********************************led.h********************************/  
  2. #ifndef _LED_H  
  3. #define _LED_H  
  4.   
  5.   
  6. void LED_Init(void);  
  7.   
  8.   
  9. #endif  


[cpp]  view plain  copy
  1. /********************************test.c********************************/  
  2. #include "sys.h"  
  3. #include "delay.h"  
  4. #include "led.h"  
  5.   
  6.   
  7. int main(void){  
  8.   
  9. Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz    
  10. delay_init(168);//初始化延时函数  
  11. LED_Init();  
  12.   
  13. while(1){  
  14. PFout(9) = 0;  
  15. delay_ms(500);  
  16. PFout(9) = 1;  
  17. delay_ms(500);  
  18. }  
  19.   
  20. }  




实验分析:

1.在以后的每个实验中,我们都会用到了ST官方提供的启动文件:startup_stm32f40_41xxx.s

这个文件的作用就是设置栈等一系列,然后转去执行我们test.c中的main函数。这样我们就不用

手动再去写这样一个启动文件了。


2.在main函数中,我们用到了Stm32_Clock_Init()和delay_init()函数,这两个函数是通过寄存器的配置来完成的。

Stm32_Clock_Init()里边是进行了一些系统时钟的设置。delay_init()函数的作用是初始化延迟函数,方便下边,

我们后边直接调用delay_ms()函数来完成延迟的功能,这些都是封装好了的,方便我们直接调用。在这个工程中,

我们把一些封装了的东西统一放在了SYSTEM目录下,仔细查看,会发现其实其底层的操作与ARM9操作类似。



3.在STM32中,我们操作硬件有两种方法:

第一种是通过ST官方提供的库函数来操作

第二种是通过操作寄存器来达到我们的目的

其实话说回来,ST官方提供的库函数,进去里边看,我们实际也可以看到,

其只是封装了一层,其本质也是操作寄存器,只是直接方便用户调用,方便快捷,

但是在学习阶段,个人建议还是操作寄存器。寄存器会了,原理你也就懂了,然后操作

库函数只是分分钟的事。


4.Cortex M4 的 GPIO的基本机构



5.推挽输出和开漏输出

推挽输出:可以输出强高低电平;

开漏输出:只可以输出强低电平,高电平得靠外部电阻拉高;




注意事项:

1.在操作GPIO等外设时,首先要做的一步是使能你对应要操作的外设的时钟,

这一点与ARM9有一定的区别。


2.在设置GPIO为推挽上拉输出时,其默认电平那么就是高电平,但是若不在LED_Init()中,

强制将引脚拉高,那么LED灯还是会亮(会亮说明此引脚默认为低),这点没大想明白。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现STM32F103HAL库点亮LED,你可以按照以下步骤进行操作: 1. 首先,确保你的工程环境已经搭建好,并且STM32F103芯片已经正确连接到开发板上。 2. 在代码包中,找到点亮LED的代码程序。该程序会使用HAL库函数来控制GPIO引脚输出来点亮LED。 3. 打开IDE,选择你使用的IDE,例如STM32CubeIDE或Keil MDK-ARM。 4. 在IDE中创建一个新项目,并设置项目名称为"led" 。 5. 生成代码。点击IDE中的"Generate Code"按钮,根据你选择的IDE生成代码。 6. 配置下载器。在CubeIDE中,点击"Run"按钮,然后在弹出的配置选项中选择下载器的类型,如果你使用的是ST-LINK调试探头,选择"ST-LINK(ST-LINK GDB Server)",如果你使用的是J-Link调试探头,选择第二项"J-LINK"。其他选项保持默认即可。 7. 下载代码。将生成的代码下载到STM32F103芯片上。 8. 运行代码。当代码成功下载到芯片上后,LED应该会点亮。 这样,你就可以使用STM32F103HAL库来点亮LED了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [STM32F103C8T6(HAL库)部分例程(点、串口通信)](https://download.csdn.net/download/weixin_43716074/12874935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [一、【STM32 HAL库开发】点亮led](https://blog.csdn.net/qq_27849725/article/details/121937526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值