今天有客户搞中断延时,搞了半天没搞定,故花了几分钟,写了个demo,给需要的朋友参考。
代码如下:
[mw_shl_code=c,true]
vu32 timdelay=0;
void delay(u32 ntime)
{
timdelay=ntime;
while(timdelay);
}
//systick中断服务函数,使用OS时用到
void SysTick_Handler(void)
{
if(timdelay)timdelay--;
}
int main(void)
{
SysTick_Config(SystemCoreClock/1000);
//delay_init(168); //初始化延时函数
LED_Init(); //初始化LED端口
/**下面是通过直接操作库函数的方式实现IO控制**/
while(1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9); //LED0对应引脚GPIOF.9拉低,亮 等同LED0=0;
GPIO_SetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1;
delay(500); //延时500ms
GPIO_SetBits(GPIOF,GPIO_Pin_9); //LED0对应引脚GPIOF.0拉高,灭 等同LED0=1;
GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉低,亮 等同LED1=0;
delay(500); //延时500ms
}
}[/mw_shl_code]
delay,就实现了ms延时,参数为1,代表1ms。参数为500,则代表500ms。
另外,通过这个例程,我们知道,STM32F407的Systick的默认频率,就是HCLK,而不是HCLK/8。
原理我就不讲了,简单的不行,看不懂的自行各种百度找答案吧。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>