时钟配置
TIM配置
3s一次中断
中断配置
开启
- HAL_TIM_Base_Start_IT(&htim1);
复制代码- 任务中的临界区
- static void vTaskLED(void *pvParameters)
- {
- while(1)
- {
- uint8_t data[]="LED";
- taskENTER_CRITICAL(); /* 进入临界区 */
- HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
- taskEXIT_CRITICAL(); /* 退出临界区 */
- HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
- vTaskDelay(500);
- }
- }
复制代码- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
- if(htim->Instance==TIM1)
- {
- uint8_t data[]="TIM1 Interrupt";
- HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
- }
复制代码
带有FreeRTOS
中断的临界区
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
- {
-
- BaseType_t xYieldRequired;
- UBaseType_t uxSavedInterruptStatus;
- uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); /* 进入临界区*/
- {
- /* 用户可以在这里添加临界段代码,我们这里暂时未用到*/
- if(htim->Instance==TIM1)
- {
- uint8_t data[]="TIM1 Interrupt";
-
- HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
-
- }
-
- }
- portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); /* 退出临界区*/
- /** 恢复挂起任务*/
- xYieldRequired = xTaskResumeFromISR(xHandleTaskLED);
- /* 退出中断后是否需要执行任务切换*/
- if( xYieldRequired == pdTRUE )
- {
- portYIELD_FROM_ISR(xYieldRequired);
- }
- }
复制代码
|