本次示例中的延时函数采用了系统内部的systick时钟,学习了正点原子的延时函数写法。
如果你移植出来不是标准的延时,那么就是你的时钟频率设置的不对,我的是48MHz。
delay.c
#include "delay.h"
static uint8_t fac_us=0;
//初始化延时函数
void Delay_Init(void)
{
fac_us = SystemCoreClock / 1000000;
}
//延时us
void delay_us(uint32_t nus)
{
uint32_t temp;
SysTick->LOAD=(uint32_t)(nus*fac_us);
SysTick->VAL=0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
//延时ms
void delay_ms(uint16_t nms)
{
uint16_t i = 0;
for(i=0;i<nms;i++)
delay_us(1000);
}
delay.h
#ifndef __DELAY_H
#define __DELAY_H
/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
void Delay_Init(void);
void delay_us(uint32_t nus);
void delay_ms(uint16_t nms);
#endif
下一节我会给出如何修改系统时钟频率以及如何查看系统时钟频率,小朋友,别着急。