#ifndef __DELAY_H#define__DELAY_H#include"stm32f4xx_conf.h"voiddelay_init();voiddelay_ms(u16 nms);voiddelay_us(u32 nus);#endif
入口参数就是要延时的单位数量(/ms) void delay_ms(u16 nms) { u8 repeat=nms/540; //这里用540,是考虑到某些客户可能超频使用, //比如超频到248M的时候,delay_xms最大只能延时541ms左右了 u16 remain=nms%540; while(repeat) { delay_xms(540); repeat--; } if(remain)delay_xms(remain); } 1. ...
{set_pwm(tone[music_tone[i]],tone[music_tone[i]]/2);Delay_ms(music_time[i]*62.5*4); } } 6.别忘了GPIO引脚要调成复用模式 点击查看代码 voidBEEP_PWM(void) { GPIO_InitTypeDef GPIO_InitStructure;/* GPIOC clock enable */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);/* GPIOC ...
入口参数就是要延时的单位数量(/ms) void delay_ms(u16 nms){u8 repeat=nms/540; //这里用540,是考虑到某些客户可能超频使用,//比如超频到248M的时候,delay_xms最大只能延时541ms左右了u16 remain=nms%540;while(repeat){delay_xms(540);repeat--;}if(remain)delay_xms(remain);} 540的意识是一个单位,...
delay_ms(10); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 8.测试 最终运行程序,电机就会转动起来,同时驱动器下面的led灯会闪烁蓝色的灯光,通过脉冲加频率可以调整速度,也可以通过细分设定去调节。我这里用到了两个步进电机和四个限位传感器,整个运行过程如下: ...
void DelayUs(u32 time) { u32 stat; SysTick->LOAD=18.750*time; //重装载寄存器,最大24位,最大值:16777215 SysTick->VAL=0; //清除CNT计数值 SysTick->CTRL|=1<<0; //SysTick 定时器的使能位 do { stat=SysTick->CTRL; //获取状态位 ...
*/voidDelayUs(u32 time){ u32 stat; SysTick- >LOAD=18.750*time;//重装载寄存器,最大24位,最大值:16777215SysTick- >VAL=0;//清除CNT计数值SysTick- >CTRL|=1< <0;//SysTick 定时器的使能位do{ stat=SysTick- >CTRL;//获取状态位}while((!(stat&1< <16))&&(stat&1< <0)); ...
delay_ms(200); //延时 200ms } } 这里的代码和之前大同小异,此段代码对 TIM3 进行初始化之后,进入死循环等待 TIM3 溢出中断,当 TIM3_CNT 的值等于 TIM3_ARR 的值的时候,就会产生 TIM3 的更新中断,然 后在中断里面取反 LED1,TIM3_CNT 再从 0 开始计数。 这里定时器定时时长 500ms 是这样计算出...
是delay_ms,而不是直接使用的 OSTimeDly。 另外,一个任务里面一般是必须有延时函数的,以释放 CPU 使用权,否则可能导致低优先 级的任务因高优先级的任务不释放 CPU 使用权而一直无法得到 CPU 使用权,从而无法运行。 软件设计部分就为大家介绍到这里。
delay_ms(10);if (t > 50) /* 控制LED1闪烁, 提示程序运行状态 */{t = 0;LED0_TOGGLE()...