HCLK时钟为84MHz,滴答定时器8分频后的时钟就就是84/8=10.5。延时不准,怎么计算my_us和my_ms 啊
u8 my_us = 11;
u32 my_ms = 10500;
void Delay_Init(void)
{
//设置为8分频 //84/8=10.5
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
}
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD = my_us*nus - 1; //重装值
SysTick->VAL = 0x00; //保证计数为0
//使能定时器
//SysTick->CTRL |= (1<<0);
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do
{
temp = SysTick->CTRL;
}while(!(temp & (1<<16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭定时器
SysTick->VAL = 0x00; //保证计数为0
}
//nus最大值798 也就是延时最大值798ms
void delay_ms(u32 nms)
{
u32 temp;
SysTick->LOAD = my_ms*nms - 1; //重装值
SysTick->VAL = 0x00; //保证计数为0
//使能定时器
//SysTick->CTRL |= (1<<0);
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do
{
temp = SysTick->CTRL;
}while(!(temp & (1<<16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭定时器
SysTick->VAL = 0x00; //保证计数为0
}
谢谢大佬帮忙看看?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
最大主频84MHz
一周热门 更多>