GigaDevice GD32 MCU
直播中

陈航

11年用户 156经验值
擅长:嵌入式技术,EMC/MEI设计
私信 关注
[经验]

【GD32330C-START开发板试用体验】+ SysTick延时

1.使用Crotex-M系列内核的单片机,如果要使用他的任何外设都需要使能相应的外设时钟,而外设的时钟又来自系统时钟源,如下图
时钟.png

2.打开例程在system_gd32f3x0.c文件中已经设定为启用外部时钟,内部时钟为84Mhz。设置外部时钟为8M,是因为板子上的晶振为8Mhz。
84.png
3.弄清楚系统时钟源后,就要设置systick的时钟源。在gd32f3x0_misc.c文件中,有一个systick时钟源的设置函数systick_clksource_set();可以设置systick的时钟源为系统时钟源或系统时钟源的8分之一。
systick.png
4.systick实现延时函数
Systick定时时间的设定:
重装载值=systick 时钟频率(Hz)X想要的定时时间(S)
如:时钟频率为:HCLK的8分频;HCLK=84MHz那么systick的时钟频率为84/8MHz=10.5MHz;
定时1毫秒
重状态值=10500000X0.001=105000

程序入下
void delay_ms(uint16_t nms)
{                 unsigned int temp;                   
        SysTick->LOAD=nms*10500;                                                                                                                                                                                                                                                                        //时间加载(SysTick->LOAD24bit)10500000/1000
        SysTick->VAL =0x00;            //清空计数器
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;  //开始计数
GD32_Systick.zip (4.4 MB)
(下载次数: 35, 2018-10-30 00:15 上传)
  
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));          //等待时间到达   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;                                                                                                                                                                                                        //关闭Systick计数器
        SysTick->VAL =0X00;                                             //清空计数器                     
}
















回帖(1)

陈航

2018-11-1 20:24:01
重状态值=10500000X0.001=105000 这里的有误 应该是10500
举报

更多回帖

发帖
×
20
完善资料,
赚取积分