delay移植只关注主频对systick的影响 主频默认用120M,8M外部时钟转换而来 所以确保Fac_Us * 8 / 120M = 1us即可 另外,主频的提高会导致systick时钟递增的速度更快,寄存器原本从零递增到最大值的时间是1.8s,主频增加后变为1.1s,即延时1.1s后定时器又会从零开始数起,结果就是我们调用一次delay_ms函数所延时的...
代码如下: #include"delay.h"// #define USE_BLOCK#ifdefUSE_BLOCK/* 和正点原子一样的延时方式,cpu死等,适用于时间比较短的方式 */voiddelay_ms(uint32_tms){ SysTick->LOAD = SystemCoreClock /1000-1;// 设置SysTick定时器为1毫秒SysTick->VAL =0;// 设置初值为0SysTick->CTRL |= SysTick_CTRL_...
delay函数是一个简单的软件延时函数,用于实现延时。这两个函数的代码清单如代码清单DAC例程部分函数说明所示。代码清单 DAC 例程主函数 int main(void){ /* peripheral clock enable */ rcu_config(); /* GPIO config */ gpio_config(); /* DAC config */ dac_config(); while(1) { #if defined (GD...
PUBLIC __delay_loops PUBLIC __delay_loops_0 SECTION `.text`:CODE:NOROOT(4)THUMB __...
dac_value_set函数用于设置模拟输出电压值,单位为mV。delay函数是一个简单的软件延时函数,用于实现延时。这两个函数的代码清单如代码清单DAC例程部分函数说明所示。 代码清单 DAC 例程主函数 int main(void) { /* peripheral clock enable */ rcu_config();...
void DelayNus(uint32_t nUs){ uint32_t tickStart = DWT->CYCCNT;/* 转换为nUs对应的时钟跳动...
//延迟1000个delay_us(1);的时间 gpio_bit_set(GPIOA,GPIO_PIN_2);//设置PA2为高电平 } 设置示波器单次触发,触发值1V,程序执行后示波器就会捕捉到两引脚的上升波形,上升点相减就是1000个delay_us(1);的时间加上gpio_bit_set(GPIOA,GPIO_PIN_2);的执行时间(44ns左右),调整修正值LOAD_CORRECT使两引脚...
在GD32 的应用中,使用 Cortex-M3 内核的 SysTick 作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对 N 减一,在Delay(N) 函数中循环检测 N 是否为 0,不为 0 则进行循环等待;若为 0 则关闭 SysTick 时钟,退出函数。 注: 全局变量TimingDelay , 必须定义为 volatile 类型 , 延迟时间将不随系统时...
voiddelay_1ms(uint32_t count) { delay = count; while(0U!= delay){ } } intmain(void) { gd_eval_led_init(LED1); gd_eval_led_init(LED2); gd_eval_led_init(LED3); systick_config(); while(1){ /* turn on LED1 */
在上述代码中,delay_us函数实现了在微秒级别进行延时操作,函数中的参数nus为需要延时的时间,函数的实现原理是通过在系统中使用中断控制器SysTick实现的。 4. 调用延时函数 在完成延时函数的编写后,我们需要在程序中调用函数。如果需要进行一段时间的延时,我们可以直接调用delay_us函数并传入需要的时间参数即可,例如: ...