用户工具

站点工具


通用定时器实验_定时点亮led

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
通用定时器实验_定时点亮led [2020/07/04 15:07]
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 开发平台。
行 49: 行 56:
       * 在本实验中,我们只用到了TIMx_CR1的最低位,也就是计数器使能位,该位必须置 1,才能让定时器开始计数。       * 在本实验中,我们只用到了TIMx_CR1的最低位,也就是计数器使能位,该位必须置 1,才能让定时器开始计数。
   * (2)DMA/​中断使能寄存器(TIMx_DIER),该寄存器是一个16位的寄存器,其各位描述如图所示:   * (2)DMA/​中断使能寄存器(TIMx_DIER),该寄存器是一个16位的寄存器,其各位描述如图所示:
-{{ :icore4:icore4_arm_hal_12_1.png?direct |}}+{{ :icore4:icore4_arm_hal_12_2.png?direct |}}
       * 这里我们同样仅关心它的第0位,该位是更新中断允许位,实验中用到的是定时器的更新中断,所以该位要设置为1,来允许由于更新事件所产生的中断。       * 这里我们同样仅关心它的第0位,该位是更新中断允许位,实验中用到的是定时器的更新中断,所以该位要设置为1,来允许由于更新事件所产生的中断。
   * (3)预分频寄存器(TIMx_PSC)。该寄存器用来设置对时钟进行分频,然后提供给计数器,作为计数器的时钟。该寄存器的各位描述如图所示:   * (3)预分频寄存器(TIMx_PSC)。该寄存器用来设置对时钟进行分频,然后提供给计数器,作为计数器的时钟。该寄存器的各位描述如图所示:
-{{ :icore4:icore4_arm_hal_12_1.png?direct |}}+{{ :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_2.png?direct |}}+{{ :icore4:icore4_arm_hal_12_4.png?direct |}}
   * (5)状态寄存器(TIMx_SR),该寄存器用来标记当前与定时器相关的各种事件/​中断是否发生。该寄存器的各位描述如图所示:   * (5)状态寄存器(TIMx_SR),该寄存器用来标记当前与定时器相关的各种事件/​中断是否发生。该寄存器的各位描述如图所示:
-{{ :icore4:icore4_arm_hal_12_3.png?direct |}}+{{ :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颜色。
通用定时器实验_定时点亮led.1593846423.txt.gz · 最后更改: 2020/07/04 15:07 由 zgf