0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

CHANBAEK 来源:电子技术攻城狮 作者:MakerInChina.cn 2023-01-16 14:50 次阅读

使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统的队列Queue。

1 新建项目

  • PIO主页新建项目,框架选择libopencm3,开发板选择 MonkeyPi_STM32_G070RB;
  • 新建完成后在src目录新建主程序文件main.c;
  • 然后更改项目文件platformio.ini的烧写和调试方式:
1upload_protocol = cmsis-dap
2debug_tool = cmsis-dap

2 添加FreeRTOS库

将上一节工程中的FreeRTOS目录直接拷贝到当前工程的lib目录下即可,添加完成后重新打开项目,以便VSCode获取代码索引

3 在FreeRTOS中使用Queue

这里将串口接收的数据存放到队列中,然后在其他任务中可以取出来进行打印显示;

  • 创建队列
1xQueueHandle uart_queue;
2
3//create queue
4    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)) {
10
11        char c = usart_recv(USART1);
12
13        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) {
11
12            //printf("recv:%c\\n", c);
13
14            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 从队列中取数据。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10896

    浏览量

    355769
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62576
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62149
  • 队列
    +关注

    关注

    1

    文章

    46

    浏览量

    10893
  • Queue
    +关注

    关注

    0

    文章

    16

    浏览量

    7261
收藏 人收藏

    评论

    相关推荐

    AN5096_介绍STM32G0系列硬件开发

    AN5096_介绍STM32G0系列硬件开发
    发表于 11-21 08:11 4次下载
    AN5096_介绍<b class='flag-5'>STM32G0</b>系列硬件<b class='flag-5'>开发</b>

    STM32G0开发笔记FreeRTOS和FreeModbus库使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为FreeRTOS和FreeModbus库使用。
    的头像 发表于 01-16 14:44 5615次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:<b class='flag-5'>FreeRTOS</b>和FreeModbus库使用

    STM32G0开发笔记FreeRTOS和CLI组件使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为FreeRTOS和CLI组件使用。
    的头像 发表于 01-16 14:47 3573次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:<b class='flag-5'>FreeRTOS</b>和CLI组件使用

    STM32G0开发笔记:使用FreeRTOS系统

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为使用FreeRTOS系统
    的头像 发表于 01-16 15:07 2407次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:使用<b class='flag-5'>FreeRTOS</b><b class='flag-5'>系统</b>

    STM32G0开发笔记:使用ADC进行NTC温度采集

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下使用ADC进行NTC温度采集。
    的头像 发表于 01-16 15:12 9546次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:使用ADC进行NTC温度采集

    STM32G0开发笔记:用PWM来实现LED呼吸灯效果

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面使用PWM来实现LED呼吸灯效果。
    的头像 发表于 01-16 15:15 2282次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:用PWM来实现LED呼吸灯效果

    STM32G0开发笔记:EEPROM M24C02的使用方法

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为EEPROM M24C02的使用方法。
    的头像 发表于 01-16 15:19 2861次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:EEPROM M24C02的使用方法

    STM32G0开发笔记:SD卡模块的使用方法

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SD卡模块的使用方法。
    的头像 发表于 01-19 16:27 2323次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:SD卡模块的使用方法

    STM32G0开发笔记:SPI接口的基本使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面介绍SPI接口的基本使用。
    的头像 发表于 01-17 10:38 3108次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:SPI接口的基本使用

    STM32G0开发笔记:多通道ADC与DMA的使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为多通道ADC与DMA的使用。
    的头像 发表于 01-17 10:41 7033次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:多通道ADC与DMA的使用

    STM32G0开发笔记:定时器timer的基本使用方法

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为定时器timer的基本使用方法。
    的头像 发表于 01-17 10:43 3688次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:定时器timer的基本使用方法

    STM32G0开发笔记:串口中断的使用

    使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为串口中断的使用。
    的头像 发表于 01-17 10:46 2347次阅读

    STM32G0开发笔记:GPIO接按键的使用方式

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为GPIO接按键的使用方式。
    的头像 发表于 01-17 10:48 1765次阅读

    STM32G0开发笔记:LED灯示例

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面为LED灯示例。
    的头像 发表于 01-17 10:52 1415次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:LED灯示例

    STM32G0开发笔记:使用libopencm3库

    使用Platformio平台的libopencm3开发框架来开发STM32G0开发环境为VSCode+PIO插件,这里以开发
    的头像 发表于 01-17 10:56 1903次阅读
    <b class='flag-5'>STM32G0</b><b class='flag-5'>开发笔记</b>:使用libopencm3库