stm32点亮一个led灯LED1和LED2以1s频率交替闪烁五次,再同时以500ms时间闪烁五次,闪烁结束后熄灭

今天实战--写一个流水灯如同各種编程语言中经典的入门代码"hello world"一样,流水灯的编写也被当做单片机的入门首推如果你已经有了前面的学习作为铺垫以及51单片机的基础,那么学习起来绝对事半功备当然没有也不需要担心,流水灯的实现是很简单的

(1)在开始写代码之前,我们还是要先建立相应的工程及其目录结构具体可以翻看之前的推文,我在这里建议大家再做一次熟能生巧。

(2)接下来打开开发板的原理图,看看LED相对应的引脚我用嘚开发板所对应引脚如下图,其中LED0与LED1分别对应于PB5、PE5

模拟输入:用于模拟量的输入,或者低功耗下省电

下拉输入:端口内下拉电阻电路導通。默认为低电平外部高电平动作。

上拉输入:端口内上拉电阻电路导通默认为高电平,外部低电平动作。

浮空输入:端口内上下MOSFET均鈈导通高阻态,输入状态仅由端口决定

开漏输出:端口输出为0时内部下拉电阻电路接地,输出1时端口相当于悬空即默认只能输出0,洳果外部需要输出1需要外接上拉电阻电路。

推挽输出:端口输出为0时内部下拉电阻电路接地输出1时内部接上拉电阻电路,默认输出为0

复用开漏输出:内部设置同开漏,但被其他外设复用

复用推挽输出:内部设置同推挽,但被其他外设复用

(3)按照上一章的方法,建立洳图文件夹并且在其中添加LED.c和LED.h,记得添加文件引导

6)在main函数中写入下列代码

(7)编译之后,通过flymcu下载看看效果。

SysTick_Init 函数形参 SYSCLK 表示的系统时钟大小默认配置我们使用的系统时钟是 72M,所以调用这个函数时形参值即为 72。函数内部调用了一个库函数 SysTick_CLKSourceConfig此函数用来对 SysTick 定时器时钟的选择,我們使用的SysTick定时器时钟是系统时钟的8 频

下面的两条语句是用来求取SysTick定时器在1us时间内和1ms时间内的计数次数

①将需要延时多少 us 的计数值加载到 SysTick 嘚 LOAD 寄存器中,fac_us值是延时 1us 所需的计数值

②清空当前计数值寄存器 VAL。

③打开 SysTick 定时器定时器开始向下递减计数。

④CTRL 寄存器的第 16 位是 SysTick 递减到 0 的標志位如果递减到 0,此为置 1通过读取该位来判断延时是否完成,从而退出 while 循环

⑥清空当前计数值寄存器 VAL。

在 main.c 文件中前面引入了工程Φ所需的头文件可以打开工程查看,这里我们主要看下 main 函数代码如下:

* 函数功能 : 主函数

主函数实现的功能比较简单,首先对 SysTick 定时器进荇初始化配置选择系统时钟 8 分频作为 SysTick 的时钟,然后初始化 LED这个初始化过程前面已经介绍过,大家也可以进入这个函数内查看最后进叺 while 循环语句,对 PC0和 PC1 管脚进行位操作里面也调用了 delay_ms 延时函数,这时候的延时是非常精确的

将工程程序编译下载到开发板内, 可以看到 LED 模塊的 2 个指示灯实现了流水灯效果

我要回帖

更多关于 stm32点亮一个led灯 的文章

 

随机推荐