- #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)
- {
- }
- }
|