GD32F207 定时实验

[复制链接]
71|10
 楼主 | 2018-10-30 12:50 | 显示全部楼层 |阅读模式
在 GD32F207 处理器中, SysTick 的最小计时单位为 AHB 的时钟周期,即 1/72000000 秒
(1/72 微秒),这样的精度足以满足大部分应用需求。本实验利用 SysTick 实现精确延时功
能,控制 LED 以 1 秒的频率闪烁。
 楼主 | 2018-10-30 12:51 | 显示全部楼层
systick 中断函数
void SysTick_Handler(void)
{
static int TimingDelayLocal = 0;
TimingDelayLocal++;
if (TimingDelayLocal == 1000)
{
EvbLedToggle(1);
EvbLedToggle(2);
EvbLedToggle(3);
TimingDelayLocal = 0;
}
}
 楼主 | 2018-10-30 12:51 | 显示全部楼层
static void SysTickConfig(void)
{
// 1ms
if (SysTick_Config(SystemCoreClock / 1000))
{
while (1);}
NVIC_SetPriority(SysTick_IRQn, 0x00);
}
 楼主 | 2018-10-30 12:51 | 显示全部楼层
int main(void)
{
/* 配置使能评估板上的设备 */
EvbSetupBoard();
PRINTF("感谢使用Colibri开发板\r\n");
PRINTF("\r\n");
PRINTF("##### SYSTICK试验 #####\r\n");
PRINTF("\r\n");
SysTickConfig();
while(1);
}
 楼主 | 2018-10-30 12:52 | 显示全部楼层
SysTick 初始化
函数 SysTick_Config()是属于内核层的通用库函数,位于 core_cm3.h 文件中。 在调用
SysTick_Config()函数时,向它输入的参数为: SystemCoreClock / 1000。因为
SystemCoreClock 是系统时钟(SYSCLK, 72M)频率,所以定时器会每 1ms 中断 1
次。
 楼主 | 2018-10-30 12:52 | 显示全部楼层
中断处理函数
SysTick 中断属于系统异常向量,在 GD32F207f10x_it.c 文件中已经默认有了它的中
断服务函数 SysTick_Handler()。
 楼主 | 2018-10-30 12:52 | 显示全部楼层
用户定时函数
用户函数 SystickDelay()首先初始化全局变量 DelayTimes 用来记录本次定时次数, 因
为前面设置 SysTick 每 1ms 中断一次,所以当 DelayTimes 为 1000 时,恰好是定时 1
秒。
 楼主 | 2018-10-30 12:53 | 显示全部楼层
void LED_Spark(void)
{
static int TimingDelayLocal = 0;
TimingDelayLocal++;
if (TimingDelayLocal == 1000)
{
EVB_LEDToggle(1);
TimingDelayLocal = 0;}
}
 楼主 | 2018-10-30 12:53 | 显示全部楼层
实验现象
将 Colibri 开发板供电,插上 USB 串口线,打开串口工具,配置串口工具为 115200 8-N-1,
将编译好的程序下载到开发板,即可看到串口工具打印出如图 12-4 的信息。手动输入任意
字符后,板载 LED 开始不停的闪烁。
 楼主 | 2018-10-30 12:54 | 显示全部楼层
SYSTICK 实验结果
  


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-11-8 13:21 | 显示全部楼层
不错不错很详细
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表