STM32G0开发笔记:使用FreeRTOS系统的队列Queue

使用platformio平台的libopencm3开发框架来开发stm32g0,下面为使用freertos系统的队列queue。
1 新建项目在pio主页新建项目,框架选择libopencm3,开发板选择 monkeypi_stm32_g070rb;新建完成后在src目录新建主程序文件main.c;然后更改项目文件platformio.ini的烧写和调试方式:1upload_protocol = cmsis-dap2debug_tool = cmsis-dap2 添加freertos库将上一节工程中的freertos目录直接拷贝到当前工程的lib目录下即可,添加完成后重新打开项目,以便vscode获取代码索引;
3 在freertos中使用queue这里将串口接收的数据存放到队列中,然后在其他任务中可以取出来进行打印显示;
创建队列1xqueuehandle uart_queue;23//create queue4 uart_queue = xqueuecreate(16, sizeof(char));使用 xqueuecreate 接口创建队列,上面为创建16个单位的char类型存储队列;
在串口中断中发送数据到队列中1/** 2 * @brief uart1 isr function 3 * 4 */ 5void usart1_isr(void) 6{ 7 //receive interrupt 8 if (((usart_cr1(usart1) & usart_cr1_rxneie) != 0) && 9 ((usart_isr(usart1) & usart_isr_rxne) != 0)) {1011 char c = usart_recv(usart1);1213 xqueuesendfromisr(uart_queue, &c, null);14 }15}因为是在中断中,因此使用 xqueuesendfromisr 向队列发送数据,如果是不在中断中则直接使用 xqueuesend 接口;
在其他任务中取出数据1static void app_uart_task(void *param) 2{ 3 char str[32] = {0}; 4 char i=0; 5 6 printf( app uart task\\n); 7 8 while(1){ 9 char c;10 if( xqueuereceive(uart_queue, &c, 5) == pdpass) {1112 //printf(recv:%c\\n, c);1314 if(c == '\\n'){15 printf( recv_str: %s\\n, str);16 memset(str,0,32);17 i=0;18 }else{19 if(i<32){20 str[i++] = c;21 }else{22 i = 0;23 }24 }25 }26 }27}使用接口函数 xqueuereceive 从队列中取数据。

【新专利介绍】一种民用智能燃气表整机功能检测设备的控制系统
5G核心网技术要求包括哪些?
SPI协议驱动设计
基于ARM11的一体化无线数据采集仪设计[图]
ACM8625 2×26W 内置 DSP 音效处理算法
STM32G0开发笔记:使用FreeRTOS系统的队列Queue
法政府投15亿欧元发展人工智能,欲跻身世界AI大佬
服务器RAM模块-可靠性和稳定性至关重要
ADC分辨率与精度的区别
金立天鉴W900评测 商务人士专享
matlab csvread函数的三种用法
工信部公布中国工业互联网研究院院长、党委书记和副院长人选
有源电力滤波器控制策略综述
磁场对通电导体的作用
PTC热敏电阻在过电流保护中的应用
德承GM-1000助攻最后一公里的货物配送机器人
LPKF InlineWeld 6200激光焊接系统的介绍
电力场效应管电路分析
AT&T为误导电子邮件告知客户购买新手机而道歉
PLD和EDA在可编程逻辑设计中的应用