127
1262
3812
中级工程师
在学习STM32的Systick定时器时,写了个 简单的延时函数,程序功能是是led闪烁,
但是只用一次delay程序似乎在while(1)并没有循环,led长亮
调用两次才能正常闪烁
使用特权
void delay_ms(uint32_t ms){ uint32_t i; SysTick_Config(72000); for(i=0;i<ms;i++){ while( !(SysTick_CTRL_COUNTFLAG_Msk&SysTick->CTRL));/* 判断中断标志位 */ } SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;/* 中断失能 */ }
int main (void){ LED_GPIO_Init(); while(1){ GPIO_ResetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); delay_ms(1000); GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN ); } }
static __INLINE uint32_t SysTick_Config(uint32_t ticks) /* 默认72MHZ */ { if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */ }
发表回复 本版积分规则 回帖后跳转到最后一页
5
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号