|
看到有人写延时函数, 个人认为那样总有些问题,于是自己写个一个, 请大家帮忙看看有什么问题,在什么极端情况下会出问题, 中断优先级必须最高,否则在优先级更高的函数里就失效了,最后的gettickcount是系统运行的毫秒数, 这个最好在main函数里面先调用Delay_Init #define __DELAY_C #include "delay.h" u64 tickcou=0xffffffffff000000; u16 fac_us; u16 fac_ms; u8 initok=0; void Delay_Init(void) { SysTick_Config(0xFFFFFF); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); // HCLK/8 fac_us=SystemCoreClock/8000000; fac_ms=SystemCoreClock/8000; SysTick->VAL=0x00; NVIC_SetPriority(SysTick_IRQn, 0); initok=1; } void SysTick_Handler(void) { tickcou=tickcou-(1 << 24); } void delay_ms(u16 nms) { u64 tar; if(initok==0)Delay_Init(); tar=tickcou+(SysTick->VAL)-(nms*fac_ms); while(tar<tickcou+(SysTick->VAL))IWDG_ReloadCounter(); } void delay_us(u16 nus) { u64 tar; if(initok==0)Delay_Init(); tar=tickcou+(SysTick->VAL)-(nus*fac_us); while(tar<tickcou+(SysTick->VAL))IWDG_ReloadCounter(); } u64 gettickcount(void) { u64 temptick; if(initok==0)Delay_Init(); temptick=(0xffffffffffffffff -tickcou+(SysTick->VAL))/fac_ms; return temptick; } /*************½áÊø***************/ |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
{
u64 temptick;
if(initok==0)Delay_Init();
temptick=(0xffffffffffffffff -tickcou-(SysTick->VAL))/fac_ms;
return temptick;
}抱歉,是-(SysTick->VAL)