阿里云的轻量服务器怎么做网站中国建设银行信用卡
2026/3/12 5:22:51 网站建设 项目流程
阿里云的轻量服务器怎么做网站,中国建设银行信用卡,一级a做爰片免费网站神马电影,北京注册公司地址HC32L130 基于 ARM Cortex-M0 内核#xff0c;以下提供软件忙等延时#xff08;快速验证#xff09; 和 SysTick 精准延时#xff08;推荐#xff09; 两种经典实现#xff0c;适配常用的 24MHz 系统主频#xff08;可根据实际主频调整#xff09;。一、基础准备需包含…HC32L130 基于 ARM Cortex-M0 内核以下提供软件忙等延时快速验证和SysTick 精准延时推荐两种经典实现适配常用的 24MHz 系统主频可根据实际主频调整。一、基础准备需包含芯片寄存器头文件确保工程已配置系统主频示例为 24MHz#include hc32l13x.h /* 系统主频定义根据实际配置修改如16MHz/24MHz/32MHz */ #define SYS_CLK_FREQ 24000000UL二、软件忙等延时简单但不精准适用于对延时精度要求不高的场景如 LED 闪烁需关闭编译器优化或用volatile防止循环被优化。1. 微秒 (us) 软件延时/** * brief 软件延时微秒基于24MHz主频编译器优化-O0 * param us: 延时微秒数范围1~65535 * retval 无 */ void delay_us(uint16_t us) { /* 24MHz下每个循环约1us需根据实际主频/编译器调整循环次数 */ uint32_t ticks (SYS_CLK_FREQ / 1000000UL) * us / 5; volatile uint32_t i; // volatile 防止编译器优化空循环 for (i 0; i ticks; i) { __NOP(); // 空指令占用1个时钟周期 } }2. 毫秒 (ms) 软件延时/** * brief 软件延时毫秒 * param ms: 延时毫秒数范围1~65535 * retval 无 */ void delay_ms(uint16_t ms) { uint16_t i; for (i 0; i ms; i) { delay_us(1000); // 调用1us延时累计1ms } }三、SysTick 精准延时推荐利用 Cortex-M0 内核自带的 SysTick 定时器实现精准延时不受编译器优化影响。1. SysTick 初始化及延时核心函数/** * brief 初始化SysTick定时器 * param 无 * retval 无 */ void SysTick_Init(void) { /* SysTick时钟源选择内核时钟SYS_CLK_FREQ关闭SysTick中断 */ if (SysTick_Config(SYS_CLK_FREQ / 1000000UL)) { /* 初始化失败则死循环 */ while (1); } /* 关闭SysTick定时器延时前手动开启 */ SysTick-CTRL ~SysTick_CTRL_ENABLE_Msk; } /** * brief SysTick精准延时微秒 * param us: 延时微秒数范围1~1000000 * retval 无 */ void delay_us_systick(uint32_t us) { uint32_t ticks 0; uint32_t reload 0; reload SysTick-LOAD; // 保存SysTick重装值 ticks reload 1 - (SYS_CLK_FREQ / 1000000UL * us); // 计算目标计数值 SysTick-VAL ticks; // 设置当前计数值 SysTick-CTRL | SysTick_CTRL_ENABLE_Msk; // 开启SysTick /* 等待计数到0 */ while ((SysTick-CTRL SysTick_CTRL_COUNTFLAG_Msk) 0); SysTick-CTRL ~SysTick_CTRL_ENABLE_Msk; // 关闭SysTick SysTick-VAL 0; // 清空计数值 } /** * brief SysTick精准延时毫秒 * param ms: 延时毫秒数范围1~1000 * retval 无 */ void delay_ms_systick(uint32_t ms) { uint32_t i; for (i 0; i ms; i) { delay_us_systick(1000); // 累计1ms } }2. 使用示例int main(void) { /* 系统初始化含主频配置 */ SystemInit(); /* 初始化SysTick */ SysTick_Init(); while (1) { /* 精准延时100ms */ delay_ms_systick(100); /* 精准延时500us */ delay_us_systick(500); /* LED翻转等操作 */ } }四、关键注意事项主频适配若系统主频不是 24MHz需修改SYS_CLK_FREQ宏定义如 16MHz 则改为16000000UL。软件延时的循环次数需重新校准可通过逻辑分析仪 / 示波器调整。编译器优化软件延时需将函数所在文件的编译优化等级设为-O0无优化或保留volatile关键字。SysTick 延时不受优化影响可正常开启编译器优化如-O2。延时范围软件延时受变量类型限制建议单次延时不超过 65535ms/us。SysTick 延时需注意SysTick-LOAD最大值24 位即 1677721524MHz 下最大单次延时约 699ms16777215/24000000≈0.699s。五、使用建议快速验证、对精度无要求使用软件延时。时序控制、精准延时如通信协议I2C/SPI/UART使用 SysTick 精准延时。若需更长延时如秒级建议结合芯片定时器如 TMR0/TMR1实现避免占用 CPU 资源。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询