单片机学习小组
直播中

半导体开发

9年用户 848经验值
擅长:可编程逻辑
私信 关注

如何利用HAL库实现LED闪灯?

如何利用HAL库实现LED闪灯?

回帖(1)

李伟

2022-2-8 15:43:43
这里先介绍一下cubemx生成的代码,它可以生成HAL库和LL库,HAL库封装得比较完善的库,用户不用过多关注底层硬件的具体设置就能完成开发,代码效率低一些;而LL库类似于直接操作寄存器,代码效率比较高,但是需要用户比较了解底层的硬件,才能较好地改写、开发。
我们这里都是使用HAL库开发,一般分两步:先在cubemx里配置芯片参数、生成底层的初始工程代码;然后在keil里打开工程文件,编写自己的应用代码,编译、下载到开发板运行。

1)cubemx生成代码
打开cubemx,点击主界面上的access to MCU select:(也可以通过菜单file->new project->MCU select进入 )。我们第一步需要选器件。


进入后,按下图,找到我们开发对应的芯片stm32f103c8t6:


双击对应的芯片后,进入如下界面,在第一个pinout & configuration选项卡中,进行处理器的资源配置:
首先配置SYS,debug选上serial wire,即选择SW调试接口;其他的不改动。
因为我们使用的简易版st-link,只能使用SW接口进行调试和下载,所以这里我们只能选择SW调试接口。


然后选择RCC时钟源,我们这个开发板上硬件是外部连接了8M的高速晶振以及32.768k的低速晶振,所以两种时钟都选择外部晶振:


然后配置GPIO,也就是我们要用到的LED的引脚,在开发板的威廉希尔官方网站 图上,我们可以看到,LED连接在PC13引脚上:

所以,配置GPIO时,我们把PC13设置为输出(在右图芯片上找到PC13引脚,然后右键,选择GPIO_output),设置完成后已经占用了的引脚会变成绿色。


然后切换到时钟选项卡,如下设置时钟:
这里我们选择外部晶振8M时钟,速率乘以9倍,设置为最高主频72Mhz


然后切换到project Manager选项卡,填入工程名,建议全英文名称和路径;由于我们使用keil开发,工具链选择MDK-ARM V5;如果上一节中cubemx中的器件包安装的是默认路径的话,图中的第三处应该可以不用修改,如果安装时不在这个路径下,则需要手动修改一下路径。


在到code generator下勾选为每个外设建立.c和.h文件,这样以后方便修改,不会很混乱:


最后,点击右上角的generate code,就可以生成工程代码了。

2)keil中的编程和下载
在keil中打开生成的工程,打开文件main.c,可以看到软件生成的代码中,main函数中已经有硬件初始化的代码,有已经有了主体的程序框架:


这里说明一下在cubemx生成的工程里,用户代码最好添加在类似如下这种USER CODE BEGIN和USER CODE END之间,这样添加的代码下次使用cubemx重新配置工程的时候可以保留,否则会被删除。
我们添加延时和翻转PC13引脚的代码如下:
这部分代码写在无限循环内部,首先拉低PC13引脚(点亮LED),然后延时500ms,再拉高PC13引脚(熄灭LED),然后再延时500ms,如此循环。


代码编写完成后后,点击build编译,完成后,下方提示栏会有提示,如果错误数为0,则成功生成了目标文件(*.axf),可以进入下一步下载到硬件上验证了。


3)烧写和运行
首先查看keil中的下载器设置,在debug选项中,确认调试和下载工具选择的是st-link:

然后,点击后面的setting,切换到flash download选项卡,勾选reset and run,这一步是设置下载完成后程序自动运行:


然后,将开发板的SWD接口的四根线,对应连接到st-link的四根线,注意不要连错,开发板的电源连接到stlink的3.3v接口:

将st-link连接到计算机的u***口上,然后点击keil上的download,就可以下载到开发板了:


下载时keil下方会有进度条提升,下载完成后,可以看到板子上的LED等以1s周期闪烁(0.5s灭,0.5s亮)。
至此,我们的第一个程序成功运行起来了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分