提示:N32G43X
前言
提示:本例程主要介绍国民技术N32G43X的SysTick定时器延迟功能,主要采用了寄存器方式,实现US和MS延迟,最小精确10US,最大延迟100MS。
提示:以下是本篇文章正文内容,下面案例可供参考
二、使用步骤
1.初始化延迟函数
代码如下(示例):
void delay_init(u32 SYSCLK)
{
SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
fac_us=SYSCLK;
fac_ms=fac_us*1000;
}
2.MS延迟函数
这里要注意,因为加载寄存器是24bit,所以最大延迟100MS
代码如下(示例):
//ms延迟函数
void delay_ms(u32 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00; //清空计数器
}
3.US延迟函数
这里注意延迟精确10US以上。
代码如下(示例):
//us延迟函数
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00; //清空计数器
}
4.秒S延迟函数
代码如下(示例):
//s延迟函数
void delay_s(u32 ns)
{
u32 i,j;
for(i=0;i<10;i++)
{
for(j =0;j<ns;j++)
{
delay_ms(100);
}
}
}
二、软件下载
42.N32G43X例程之-SysTick定时器做延迟
https://download.csdn.net/download/suqingxiao/73701826