CW32L083实现SysTick精准微秒延时驱动

在做18b20时需要用到精准的微秒定时器。
时钟初始化,这里采用cw的例程,驱动hsi主频为64mvoid rcc_configuration(void){ /* 0. hsi使能并校准 */ rcc_hsi_enable(rcc_hsiosc_div6); /* 1. 设置hclk和pclk的分频系数 */ rcc_hclkprs_config(rcc_hclk_div1); rcc_pclkprs_config(rcc_pclk_div1); /* 2. 使能pll,通过hsi倍频到64mhz */ rcc_pll_enable(rcc_pllsource_hsi, 8000000, rcc_pll_mul_8); // hsi 默认输出频率8mhz ///< 当使用的时钟源hclk大于24m,小于等于48mhz:设置flash 读等待周期为2 cycle ///load),然后开始计时,查询到计数器已经在计时,且溢出标志位为1时中止计时,以实现微秒延时,代码如下:
void delaytick_us(uint32_t nus){ uint32_t temp; systick- >ctrl=0; systick- >load = fac_us*nus - 1; systick- >ctrl = systick_ctrl_clksource_msk |systick_ctrl_enable_msk; //使能时钟、开始计时 do { temp = systick- >ctrl; //读寄存器,判断是否溢出位 }while(!(temp&(systick_ctrl_countflag_msk)) && (temp & 0x01)); systick- >ctrl=0; //停止计时 }4、毫秒延时函数的实现,由于毫秒的计数初值比较大,所以不能象微秒一样直接把相乘的计数值装载进load寄存器中,需要以1毫秒为单位,在中断中每一毫秒相加进行计数,当计数值达到所需要的计数的值时,中止计时,来实现精准的延时。
代码如下:
void delaytick_ms(uint32_t nms){ systick- >ctrl=0; uwtick = 0; systick_config(fac_ms); while(uwtickctrl=0; uwtick = 0; }

云计算在新零售场景上的应用
中国太阳能光伏最新发展形势分析
采用开放式现场总线技术的螺旋弹簧热预压设备控制系统的解决方案
具有灵敏振动传感器/压电传感器的快门保护电路
中国移动机器人双年度创新产品奖:极智嘉新型F35C智能叉式机器人
CW32L083实现SysTick精准微秒延时驱动
Mobileye第一次破天荒宣布要“开放”即将推出的EyeQ5的具体计划是什么呢?
我们还得等5G换机潮多久
FPGA技术:了解HLS的实现机理
价格一样,看完小米6和OPPO r9s的评测对比,你会怎么选?
介绍时序分析基本概念MMMC
为什么850PPM /°C无补偿TC不适用于使用温度查找功能的系统
苹果又被诺基亚起诉,被指侵犯32项专利
霍尔开关门磁,让你的生活更智能!
华为p11最新消息:怕不怕,8G+全面屏,华为新机p11吊打三星S8!
jlink无法识别的usb设备
高通携手Meta利用Llama 2赋能终端侧AI应用
文心大模型有望在长城、领克、smart等车型上率先落地
做好网络通信保障工作 为高考学子保驾护航
MCUXpresso IDE的栈分析功能