小会 · 2022年08月23日 · 河南

【MM32F5270开发板试用】+ systick定时器做延时测试

编写测试程序有时会用到延时函数,下面使用systick定时器做延时测试。

一、systick时钟框图
001.png

二、程序

2.1、初始化

void delay_init()
{
    fac_us=CLOCK_SYS_FREQ/8000000;                 
    fac_ms=(uint16_t)fac_us*1000;                     
}    

2.2、延时函数

void delay_us(uint32_t nus)
{        
    uint32_t temp;             
    SysTick->LOAD=nus*fac_us;                              
    SysTick->VAL=0x00;                            
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;     
    do
    {
        temp=SysTick->CTRL;
    }while((temp&0x01)&&!(temp&(1<<16)));          
    SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;    
    SysTick->VAL =0X00;                           
}

void delay_ms(uint16_t nms)
{                     
    uint32_t temp;           
    SysTick->LOAD=(uint32_t)nms*fac_ms;                
    SysTick->VAL =0x00;                            
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;    
    do
    {
        temp=SysTick->CTRL;
    }while((temp&0x01)&&!(temp&(1<<16)));          
    SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;    
    SysTick->VAL =0X00;                                    
} 

2.3、主程序

int main(void)
{
        BOARD_Init();
        delay_init();
        init_led();
        init_key();
        printf("\r\nled test.\r\n");
        
        while(1)
        {                
                GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u);
                delay_ms(1);
                GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u);
                delay_ms(1);
                
        }
}

三、程序测试

LED4指示灯电平输出,1ms间隔翻转。
输出电平波形:
002.jpg

推荐阅读
关注数
6143
内容数
276
灵动MM32 MCU相关技术知识,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息