#include"stm8s.h"
uint8_t startflag = 0;
uint16_t timercnt = 0;
/*******************************************************************************
函数名;init_clk()
功能 :初始化系统时钟
输入 :无
输出 :无
返回值:无
备注 :无
*******************************************************************************/
void init_clk(void)
{
//初始化时钟
CLK_HSICmd(ENABLE);//开始内部高频RC
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//不分频
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
}
/*******************************************************************************
函数名:init_timer4()
功能 :初始化timer4
输入 :无
输出 :无
返回值:无
备注 :无
*******************************************************************************/
void init_timer4(void)
{
TIM4_TimeBaseInit(TIM4_PRESCALER_8, 50); //每个计数周期为0.5us@8分频@16MHz
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4_Cmd(ENABLE);
}
/*******************************************************************************
函数名:init_gpio()
功能 :初始化GPIO
输入 :无
输出 :无
返回值:无
备注 :无
*******************************************************************************/
void init_gpio(void)
{
GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST);
}
/*******************************************************************************
函数名:delayus()
功能 :延时函数
输入 :us 微秒数
输出 :无
返回值:无
备注 :目前支持25us的整数倍,最小为25us,不能再小了
*******************************************************************************/
void delayus(uint16_t us)
{
//Set the flag to make ISR start to count
startflag = 1;
us = (us <= 25?25:us);
us = us / 25 - 1;
// TIM4_Cmd(ENABLE);
//Wait until expire
while(timercnt <= us);
//TIM4_Cmd(DISABLE);
//Clear flag and timer cnt
startflag = 0;
timercnt = 0;
}
/*******************************************************************************
函数名:delayms()
功能 :延时函数
输入 :ms 毫秒数
输出 :无
返回值:无
备注 :最小为1ms
*******************************************************************************/
void delayms(uint16_t ms)
{
uint16_t i=0;
uint16_t j=0;
for(i=0;i<ms;i++)
{
delayus(1000);
}
}
/*******************************************************************************
函数名:main()
功能 :主函数
输入 :无
输出 :无
返回值:无
备注 : 无
*******************************************************************************/
int main(void)
{
init_gpio();
init_clk();
init_timer4();
enableInterrupts();
while(1)
{
GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
delayus(50);
//delayms(750);
}
return 0;
}
void assert_failed(u8* file, u32 line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
|