这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
通用定时器实验_定时点亮led [2020/07/04 14:58] zgf |
通用定时器实验_定时点亮led [2022/03/22 10:19] (当前版本) sean |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | | **银杏科技有限公司旗下技术文档发布平台** |||| | ||
+ | |技术支持电话|**0379-69926675-801**||| | ||
+ | |技术支持邮件|Gingko@vip.163.com||| | ||
+ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
+ | | V1.0 | 2020-07-04 | gingko | 初次建立 | | ||
+ | |||
+ | |||
===== 实验十二:通用定时器实验——定时点亮LED ===== | ===== 实验十二:通用定时器实验——定时点亮LED ===== | ||
行 8: | 行 15: | ||
- 掌握KEIL MDK 集成开发环境使用方法。 | - 掌握KEIL MDK 集成开发环境使用方法。 | ||
==== 二、 实验设备及平台 ==== | ==== 二、 实验设备及平台 ==== | ||
- | - iCore4 双核心板。 | + | - iCore4 双核心板[[https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22598974120.15.5923532fsFrHiE&id=551864196684|点击购买]]。 |
- | - JLINK(或相同功能)仿真器。 | + | - JLINK(或相同功能)仿真器[[https://item.taobao.com/item.htm?id=554869837940|点击购买]]。 |
- Micro USB线缆。 | - Micro USB线缆。 | ||
- Keil MDK 开发平台。 | - Keil MDK 开发平台。 | ||
行 46: | 行 53: | ||
* (1)控制寄存器1(TIMx_CR1),该寄存器的各位描述如图所示: | * (1)控制寄存器1(TIMx_CR1),该寄存器的各位描述如图所示: | ||
- | + | {{ :icore4:icore4_arm_hal_12_1.png?direct |}} | |
- | * 在本实验中,我们只用到了TIMx_CR1的最低位,也就是计数器使能位,该位必须置 1,才能让定时器开始计数。 | + | * 在本实验中,我们只用到了TIMx_CR1的最低位,也就是计数器使能位,该位必须置 1,才能让定时器开始计数。 |
* (2)DMA/中断使能寄存器(TIMx_DIER),该寄存器是一个16位的寄存器,其各位描述如图所示: | * (2)DMA/中断使能寄存器(TIMx_DIER),该寄存器是一个16位的寄存器,其各位描述如图所示: | ||
- | + | {{ :icore4:icore4_arm_hal_12_2.png?direct |}} | |
- | * 这里我们同样仅关心它的第0位,该位是更新中断允许位,实验中用到的是定时器的更新中断,所以该位要设置为1,来允许由于更新事件所产生的中断。 | + | * 这里我们同样仅关心它的第0位,该位是更新中断允许位,实验中用到的是定时器的更新中断,所以该位要设置为1,来允许由于更新事件所产生的中断。 |
* (3)预分频寄存器(TIMx_PSC)。该寄存器用来设置对时钟进行分频,然后提供给计数器,作为计数器的时钟。该寄存器的各位描述如图所示: | * (3)预分频寄存器(TIMx_PSC)。该寄存器用来设置对时钟进行分频,然后提供给计数器,作为计数器的时钟。该寄存器的各位描述如图所示: | ||
- | + | {{ :icore4:icore4_arm_hal_12_3.png?direct |}} | |
* 这里,定时器的时钟来源有4个: | * 这里,定时器的时钟来源有4个: | ||
* 内部时钟(CK_INT) | * 内部时钟(CK_INT) | ||
行 60: | 行 67: | ||
* 这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器的相关位来设置。这里的CK_INT时钟是从APB1倍频的来的,除非APB1的时钟分频数设置为1(一般都不会是1),否则通用定时器TIMx的时钟是APB1时钟的2倍,当APB1的时钟不分频的时候,通用定时器TIMx的时钟就等于APB1的时钟。这里还要注意的就是高级定时器以及TIM9~TIM11的时钟不是来自APB1,而是来自APB2的。 | * 这些时钟,具体选择哪个可以通过TIMx_SMCR寄存器的相关位来设置。这里的CK_INT时钟是从APB1倍频的来的,除非APB1的时钟分频数设置为1(一般都不会是1),否则通用定时器TIMx的时钟是APB1时钟的2倍,当APB1的时钟不分频的时候,通用定时器TIMx的时钟就等于APB1的时钟。这里还要注意的就是高级定时器以及TIM9~TIM11的时钟不是来自APB1,而是来自APB2的。 | ||
* (4)自动重装载寄存器(TIMx_ARR),该寄存器在物理上实际对应着2个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存器在《STM32F7中文参考手册》里面被叫做影子寄存器。事实上真正起作用的是影子寄存器。根据TIMx_CR1寄存器中APRE位的设置:APRE=0时,预装载寄存器的内容可以随时传送到影子寄存器,此时2者是连通的;而APRE=1时,在每一次更新事件(UEV)时,才把预装载寄存器(ARR)的内容传送到影子寄存器。自动重装载寄存器的各位描述如图所示: | * (4)自动重装载寄存器(TIMx_ARR),该寄存器在物理上实际对应着2个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存器在《STM32F7中文参考手册》里面被叫做影子寄存器。事实上真正起作用的是影子寄存器。根据TIMx_CR1寄存器中APRE位的设置:APRE=0时,预装载寄存器的内容可以随时传送到影子寄存器,此时2者是连通的;而APRE=1时,在每一次更新事件(UEV)时,才把预装载寄存器(ARR)的内容传送到影子寄存器。自动重装载寄存器的各位描述如图所示: | ||
- | + | {{ :icore4:icore4_arm_hal_12_4.png?direct |}} | |
* (5)状态寄存器(TIMx_SR),该寄存器用来标记当前与定时器相关的各种事件/中断是否发生。该寄存器的各位描述如图所示: | * (5)状态寄存器(TIMx_SR),该寄存器用来标记当前与定时器相关的各种事件/中断是否发生。该寄存器的各位描述如图所示: | ||
- | + | {{ :icore4:icore4_arm_hal_12_5.png?direct |}} | |
* 只要对以上几个寄存器进行简单的设置,我们就可以使用通用定时器了,并且可以产生中断。 | * 只要对以上几个寄存器进行简单的设置,我们就可以使用通用定时器了,并且可以产生中断。 | ||
* 本实验中,通过STM32的三个GPIO口来驱动LED灯的三个通道,设定GPIO为推挽输出模式,采用灌电流的方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过通用定时器TIM3实现500ms定时,每500ms变换一次LED颜色。 | * 本实验中,通过STM32的三个GPIO口来驱动LED灯的三个通道,设定GPIO为推挽输出模式,采用灌电流的方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过通用定时器TIM3实现500ms定时,每500ms变换一次LED颜色。 |