> 文档中心 > 【MM32F5270开发板试用】+ systick定时器做延时测试

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


本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:小会

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

一、systick时钟框图

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

二、程序

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<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<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间隔翻转。
输出电平波形:

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

k歌软件