stm32 freertos 之串口中断

一、中断处理函数

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("%c\r\n",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();		
}


  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在STM32上使用FreeRTOS串口中断,您可以按照以下步骤进行操作: 1. 配置串口模块: - 使用STM32CubeMX配置您的引脚和时钟设置,以启用串口功能。 - 在生成的代码中,找到与您使用的串口对应的文件(例如,USART1、USART2等)。 - 在该文件中,配置串口的波特率、数据位、停止位、校验位等参数。 2. 初始化FreeRTOS: - 在您的main函数中,调用FreeRTOS的初始化函数(例如`vTaskStartScheduler()`)来启动任务调度器。 3. 创建串口接收任务: - 使用FreeRTOS提供的API函数(例如`xTaskCreate()`)创建一个任务,用于处理串口接收中断。 4. 配置串口中断: - 在您的代码中,编写串口接收中断处理函数,并将其与正确的中断向量关联。 - 在中断处理函数中,使用FreeRTOS提供的通信机制(例如队列)来处理接收到的数据。 5. 在串口接收任务中处理数据: - 在串口接收任务的任务函数中,使用FreeRTOS提供的API函数(例如`xQueueReceive()`)从队列中接收数据。 - 处理接收到的数据,执行您希望实现的功能。 6. 发送数据到串口: - 在其他任务中,使用FreeRTOS提供的API函数(例如`xQueueSend()`)将数据发送到串口发送队列。 - 在串口发送中断处理函数中,从发送队列中获取数据,并将其发送到串口。 通过以上步骤,您可以在STM32上实现使用FreeRTOS串口中断进行数据接收和发送的功能。请注意,在实际编程中,您还需要处理任务优先级、同步和互斥等问题,以确保正确和可靠的数据传输。建议您参考STMicroelectronics的官方文档、FreeRTOS文档和相关示例代码,以获取更详细的指导和示例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值