bsp_misc.h
#ifndef __BSP_MISC_H
#define __BSP_MISC_H
#include "gd32e10x.h"
void SysTick_Init(void);
void Delay_ms(uint32_t ms);
#endif
bsp_misc.c
#include "bsp_misc.h"
__IO uint16_t Count=0;
/*!
\brief 配置嵌套向量中断控制器NVIC
\param[in] none
\param[out] none
\retval none
*/
static void NVIC_Configuration(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2 );
nvic_irq_enable(SysTick_IRQn,1,1);
}
/*!
\brief 配置SysTick
\param[in] ms: 毫秒数
\param[out] none
\retval none
*/
void SysTick_Init(void)
{
systick_clksource_set(SYSTICK_CLKSOURCE_HCLK);
NVIC_Configuration();
}
/*!
\brief 执行下面函数时一定要保证工程中有gd32e10x_it.c,否则会卡在这个函数中出不来
下面函数实现的延时若干毫秒
\param[in] ms: 毫秒数
\param[out] none
\retval none
*/
void Delay_ms(uint32_t ms)
{
uint32_t i;
SysTick_Config(SystemCoreClock / 1000U);
for(i=0;i<ms;i++)
{
while ( ((SysTick->CTRL)&SysTick_CTRL_COUNTFLAG_Msk)==0 );
}
SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
}
main.c
void test_misc(void)
{
// LED_GREEN_GPIO_Config();
// SysTick_Init();
// while(1)
// {
// LED_GREEN_OFF;
// Delay_ms(3000);
// LED_GREEN_ON;
// Delay_ms(3000);
// }
LED_GREEN_GPIO_Config();
LED_GREEN_OFF;
SysTick_Init();
SysTick_Config(SystemCoreClock / 1000U);
while(1);
}
gd32e10x_it.c
extern __IO uint16_t Count;
/*!
\brief this function handles SysTick exception
\param[in] none
\param[out] none
\retval none
*/
void SysTick_Handler(void)
{
Count++;
//实现绿灯亮三秒,灭三秒
if(Count==3000)
{
LED_GREEN_TOGGLE;
Count=0;
}
}