一、中断处理函数
void USART1_IRQHandler(void)
{
BaseType_t xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;
u8 cChar;
if(USART_GetITStatus (USART1,USART_IT_RXNE)!=RESET)
{
cChar=USART_ReceiveData(USART1);
xQueueSendToBackFromISR (xQueueRx,&cChar,&xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
}
二、中断向量表配置
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig (NVIC_PriorityGroup_4);
NVIC_InitStructure .NVIC_IRQChannel =USART1_IRQn ;
NVIC_InitStructure .NVIC_IRQChannelPreemptionPriority =6;
NVIC_InitStructure .NVIC_IRQChannelCmd =ENABLE ;
NVIC_Init(&NVIC_InitStructure );
}
三、串口接收任务创建
xQueueHandle xQueueRx;
void vPC_Communication_Task(void *pvParameters)
{
BaseType_t xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;
u8 rx=0;
xQueueRx=xQueueCreate(20,sizeof(u8));
while(1)
{
if(xQueueReceiveFromISR(xQueueRx,&rx,&xHigherPriorityTaskWoken))
{
printf("%crn",rx);
}
vTaskDelay(1000/portTICK_RATE_MS );
}
}
四、主函数
int main(void)
{
BSP_INIT();
xTaskCreate(vLED_Task ,"led_task",50,NULL,1,NULL);
xTaskCreate(vPC_Communication_Task,"vPC_Communication_Task",500,NULL,2,NULL);
vTaskStartScheduler();
}
上一篇:STM32F407上调试freeRTOS问题
下一篇:stm32f407 adc的dma中断方式
推荐阅读最新更新时间:2024-11-13 15:03
设计资源 培训 开发板 精华推荐
- -8V, 16V DC to DC 风扇电机多路输出电源
- AUTOSAR_Fee实现源码
- LTM4604A 的典型应用 - 具有跟踪功能的低电压、4A DC/DC 模块稳压器
- MAXREFDES1160:使用MAX14853的全双工,500kbps和2.75kVRMS隔离式RS-485模块
- 手机typec扩展坞
- 使用 Analog Devices 的 LTC6990HS6#TRMPBF 的参考设计
- RDR-877 - 6W 隔离反激电源,使用 LinkSwitch-TNZ 无损生成交流过零信号
- 使用 Analog Devices 的 LT1587CT-3.45 的参考设计
- LTC3624HMSE-2 具有 2.25MHz 可调输出电压、2A 同步降压稳压器的典型应用
- 使用 NXP Semiconductors 的 MC34119 的参考设计