定时器是MCU常用的,这篇测试下MindSDK例程下的tim定时器。开发环境按照论坛的教程安装完成,下面就直接打开例程编译。
1、例程下载:
网站注册下载MindSDK例程包。
2、打开TIM例程
打开tim_basic例程
3、端口初始化
初始化LED指示灯端口
void BOARD_InitPins(void)
{
GPIO_Init_Type gpio_init;
gpio_init.Pins = GPIO_PIN_0;
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOI, &gpio_init);
gpio_init.Pins = GPIO_PIN_2;
gpio_init.PinMode = GPIO_PinMode_Out_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &gpio_init);
gpio_init.Pins = GPIO_PIN_15;
gpio_init.PinMode = GPIO_PinMode_In_PullUp;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
gpio_init.Pins = GPIO_PIN_6;
gpio_init.PinMode = GPIO_PinMode_AF_PushPull;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_7);
gpio_init.Pins = GPIO_PIN_7;
gpio_init.PinMode = GPIO_PinMode_In_Floating;
gpio_init.Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_init);
GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_7);
}
定时器初始化
void app_tim_init(void)
{
TIM_Init_Type tim_init;
tim_init.ClockFreqHz = BOARD_TIM_FREQ;
tim_init.StepFreqHz = APP_TIM_UPDATE_PERIOD;
tim_init.Period = APP_TIM_UPDATE_PERIOD - 1u;
tim_init.EnablePreloadPeriod = false;
tim_init.PeriodMode = TIM_PeriodMode_Continuous;
tim_init.CountMode = TIM_CountMode_Increasing;
TIM_Init(BOARD_TIM_PORT, &tim_init);
NVIC_EnableIRQ(BOARD_TIM_IRQn);
TIM_EnableInterrupts(BOARD_TIM_PORT, TIM_INT_UPDATE_PERIOD, true);
TIM_Start(BOARD_TIM_PORT);
}
定时器中断
void BOARD_TIM_IRQHandler(void)
{
uint32_t flags = TIM_GetInterruptStatus(BOARD_TIM_PORT);
if ( 0u != (flags & TIM_STATUS_UPDATE_PERIOD ) )
{
if (i==0 )
{
i=1;
GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u);
GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 0u);
}
else
{
i=0;
GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u);
GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 1u);
}
}
TIM_ClearInterruptStatus(BOARD_TIM_PORT, flags);
}
4、程序运行
程序下载后,LED4和LED5间隔1S交替点亮。
原作者:meijing
|