这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore3l_6 [2020/11/07 17:59] zgf [六、实验现象] |
icore3l_6 [2020/11/11 10:57] (当前版本) zgf |
||
---|---|---|---|
行 46: | 行 46: | ||
\\ | \\ | ||
\\ | \\ | ||
- | ==== 实验六:SYSTICK定时器实验——定时闪烁LED ==== | + | ===== 实验六:SYSTICK定时器实验——定时闪烁LED ===== |
- | === 一、实验目的与意义 === | + | ==== 一、实验目的与意义 ==== |
- 了解STM32 GPIO结构 | - 了解STM32 GPIO结构 | ||
- 了解STM32 GPIO 特征 | - 了解STM32 GPIO 特征 | ||
行 53: | 行 53: | ||
- 掌握STM32 HAL库中SYSTICK属性的配置方法 | - 掌握STM32 HAL库中SYSTICK属性的配置方法 | ||
- 掌握KEILMDK 集成开发环境使用方法 | - 掌握KEILMDK 集成开发环境使用方法 | ||
- | === 二、实验设备及平台 === | + | ==== 二、实验设备及平台 ==== |
- iCore3L 双核心板 | - iCore3L 双核心板 | ||
- JLINK(或相同功能)仿真器 | - JLINK(或相同功能)仿真器 | ||
行 60: | 行 60: | ||
- STM32CubeMX开发平台 | - STM32CubeMX开发平台 | ||
- 装有WIN XP(及更高版本)系统的计算机 | - 装有WIN XP(及更高版本)系统的计算机 | ||
- | === 三、实验原理 === | + | ==== 三、实验原理 ==== |
- | == 1、时钟系统简介 == | + | === 1、时钟系统简介 === |
**(1)STM32时钟源分以下五类:** | **(1)STM32时钟源分以下五类:** | ||
* 内部高速时钟(HSI):RC振荡器,精度不高。 | * 内部高速时钟(HSI):RC振荡器,精度不高。 | ||
行 69: | 行 69: | ||
* 锁相环倍环输出(PLL):其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频倍数可调,但是其最大输出频率受限数值因芯片型号而异。 | * 锁相环倍环输出(PLL):其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频倍数可调,但是其最大输出频率受限数值因芯片型号而异。 | ||
**(2)系统时钟SYSCLK可来源于:HSI振荡器时钟、HSE振荡器时钟、PLL时钟。** | **(2)系统时钟SYSCLK可来源于:HSI振荡器时钟、HSE振荡器时钟、PLL时钟。** | ||
- | == 2、SYSTICK简介 == | + | === 2、SYSTICK简介 === |
* 在STM32中,SysTick是内核Cortex-M4中的一个24位的递减计数器,也称系统嘀答定时器。SysTick的最大使命,就是定期地产生异常请求,作为系统的时基。操作系统需要这种“滴答”来推动任务和时间的管理。 | * 在STM32中,SysTick是内核Cortex-M4中的一个24位的递减计数器,也称系统嘀答定时器。SysTick的最大使命,就是定期地产生异常请求,作为系统的时基。操作系统需要这种“滴答”来推动任务和时间的管理。 | ||
* SysTick在设定初值并开启后,每经一个系统时钟周期,计数值减1,计数到0时,将从重载寄存器中自动重新装载定时初值并继续计数,同时内部的COUNTFLAG标志位置1,触发中断(中断允许情况下),中断响应属于NVIC异常,异常号为15,Systick中断优先级可设置。 | * SysTick在设定初值并开启后,每经一个系统时钟周期,计数值减1,计数到0时,将从重载寄存器中自动重新装载定时初值并继续计数,同时内部的COUNTFLAG标志位置1,触发中断(中断允许情况下),中断响应属于NVIC异常,异常号为15,Systick中断优先级可设置。 | ||
- | == 3、SYTICK寄存器控制 == | + | === 3、SYTICK寄存器控制 === |
SysTick定时器有4个寄存器,分别为: | SysTick定时器有4个寄存器,分别为: | ||
* SYST_CSR SysTick控制及状态寄存器 | * SYST_CSR SysTick控制及状态寄存器 | ||
行 92: | 行 92: | ||
|23:0|RELOAD|R/W|0|当倒数计数到0时,加载到SYST_CVR寄存器的值| | |23:0|RELOAD|R/W|0|当倒数计数到0时,加载到SYST_CVR寄存器的值| | ||
* RELOAD值可以是0x00000001 - 0x00FFFFFF范围内的任何值。起始值可以为0,但是没有效果,因为SysTick异常请求和COUNTFLAG在从1到0计数时才被激活。重新装载值是根据其使用情况计算的。例如,要生成周期为N个处理器时钟周期的多次触发定时器,可以配置RELOAD值为N-1。如果每100个时钟脉冲需要SysTick中断,则将RELOAD设置为99。 | * RELOAD值可以是0x00000001 - 0x00FFFFFF范围内的任何值。起始值可以为0,但是没有效果,因为SysTick异常请求和COUNTFLAG在从1到0计数时才被激活。重新装载值是根据其使用情况计算的。例如,要生成周期为N个处理器时钟周期的多次触发定时器,可以配置RELOAD值为N-1。如果每100个时钟脉冲需要SysTick中断,则将RELOAD设置为99。 | ||
+ | |||
**(3)SYST_CVR当前数值寄存器** | **(3)SYST_CVR当前数值寄存器** | ||
{{ :icore3l:icore3l_arm_hal_6_3.png?direct |}} | {{ :icore3l:icore3l_arm_hal_6_3.png?direct |}} | ||
行 178: | 行 179: | ||
} | } | ||
</code> | </code> | ||
- | ==== 五、实验步骤 ==== | + | ==== 五、实验步骤 ===== |
- 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连); | - 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连); | ||
- 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电; | - 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电; |