MM32F5270开发板试用】 MindSDK下TIM定时器测试
本篇文章来自极术社区与灵动组织的MM32F5270开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:meijing
定时器是MCU常用的,这篇测试下MindSDK例程下的tim定时器。开发环境按照论坛的教程安装完成,下面就直接打开例程编译。
1、例程下载:
https://mindsdk.mindmotion.co…网站注册下载MindSDK例程包。
2、打开TIM例程
打开tim_basic例程
3、端口初始化
初始化LED指示灯端口
void BOARD_InitPins(void){ GPIO_Init_Type gpio_init; /* LED0. */ gpio_init.Pins = GPIO_PIN_0; gpio_init.PinMode = GPIO_PinMode_Out_PushPull; gpio_init.Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOI, &gpio_init); /* LED1. */ gpio_init.Pins = GPIO_PIN_2; gpio_init.PinMode = GPIO_PinMode_Out_PushPull; gpio_init.Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &gpio_init); /* KEY0. */ gpio_init.Pins = GPIO_PIN_15; gpio_init.PinMode = GPIO_PinMode_In_PullUp; gpio_init.Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &gpio_init); /* PB6 - UART1_TX. */ 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); /* PB7 - UART1_RX. */ 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){ /* Set the counter counting step. */ TIM_Init_Type tim_init; tim_init.ClockFreqHz = BOARD_TIM_FREQ; tim_init.StepFreqHz = APP_TIM_UPDATE_PERIOD; /* 1s. */ 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); /* Enable interrupt. */ NVIC_EnableIRQ(BOARD_TIM_IRQn); TIM_EnableInterrupts(BOARD_TIM_PORT, TIM_INT_UPDATE_PERIOD, true); /* Start the counter. */ 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 ) ) /* Check update status. */ { //putchar('*'); if (i==0 ) /* key is no pressed. */ { i=1; GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 1u); /* led off. */ GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 0u); /* led on. */ } else /* key is pressed. */ { i=0; GPIO_WriteBit(BOARD_LED0_GPIO_PORT, BOARD_LED0_GPIO_PIN, 0u); /* led on. */ GPIO_WriteBit(BOARD_LED1_GPIO_PORT, BOARD_LED1_GPIO_PIN, 1u); /* led off. */ } } TIM_ClearInterruptStatus(BOARD_TIM_PORT, flags);}
4、程序运行
程序下载后,LED4和LED5间隔1S交替点亮