SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;// 关闭计数器SysTick->VAL =0;// 时间到了溢出后要记得清空}voiddelay_us(uint32_tus){ SysTick->LOAD = SystemCoreClock /1000000-1;// 设置SysTick定时器为1毫秒SysTick->VAL =0;// 设置初值为0SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;// 使能...
//_delay_us(0.5); //实测560ns //_delay_us(1); //实测1.02us //_delay_us(5);...
如果我们知道系统时钟频率为72MHz,并且想要实现1us的延时,我们可以在调用delay_us函数时传入72作为参数: c delay_us(72); // 延时约1us 测试并验证延时函数的准确性: 为了验证延时函数的准确性,你可以使用示波器或其他测量工具来测量实际延时时间,并与预期值进行比较。如果存在差异,可能需要调整延时函数中的参...
#define SYSTEM_FQ 120000000//定时器的时钟频率,以120Mhz为例voiddelay_us(intcount){SysTick->LOAD=count*(SYSTEM_FQ/1000000)-1;//设定重装载值SysTick->VAL=0;// 计数归零SysTick->CTRL=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_ENABLE_Msk;// 使能定时器,开始计数while((SysTick->CTRL&SysTick_CTRL...
由于GPIO地址映射一样,所以sys通用 但是GD没有define GPIO PORT地址,所以新增定义 delay移植只关注主频对systick的影响 主频默认用120M,8M外部时钟转换而来 所以确保Fac_Us * 8 / 120M = 1us即可 另外,主频的提高会导致systick时钟递增的速度更快,寄存器原本从零递增到最大值的时间是1.8s,主频增加后变为1.1s...
void delay_ms(uint32_t count) { count=count*10; do{ delay_us(100); }while(count--); } 2.4.2LED配置函数 LED相关配置函数实现在bsp_led.c文件中,首先将LED进行注册,注册语句如下,注册之后即可通过别名的方式对相关LED进行相关配置。 C
void delay_us(uint32_t us); void systick_deinit(void); /* * Call by Systick interrupt server */ void systick_handler(void); #endif 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. platform_systick.c ...
在上述代码中,delay_us函数实现了在微秒级别进行延时操作,函数中的参数nus为需要延时的时间,函数的实现原理是通过在系统中使用中断控制器SysTick实现的。 4. 调用延时函数 在完成延时函数的编写后,我们需要在程序中调用函数。如果需要进行一段时间的延时,我们可以直接调用delay_us函数并传入需要的时间参数即可,例如: ...
void delay_us(uint32_t us); void systick_deinit(void); /* * Call by Systick interrupt server */ void systick_handler(void); #endif 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. platform_systick.c ...
delay_us(1); cs1237_clk_low(); delay_us(1); } return read_data; } } 哎程序读取完成但是还需要配置啊,放弃只读取的函数吧重新写一个 int32_tcs1237_oper(int32_tread_data,uint8_tcommand,uint8_tregister) { uint8_ti; int32_tad_data =0; ...