用STM32Cube+FreeRTOS+Keil5对STM32F0编程之通过USART发送数据

发布者:EnigmaticCharm最新更新时间:2019-07-25 来源: eefocus关键字:STM32Cube  FreeRTOS  Keil5  STM32F0  USART  发送数据 手机看文章 扫描二维码
随时随地手机看文章

STM32CubeMX的设置变化

Pinout 中使能 FreeRTOS

使能FreeRTOS

Configuration 中配置 FreeRTOS

中间件中增加了FreeRTOS

添加任务

在添加任务

生成代码

Keil5 中编辑代码

main 函数

int main(void)

{

  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration----------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();      /* 硬件抽象层 */


  /* USER CODE BEGIN Init */


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();         /* 时钟 */


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */

   /* Initialize all configured peripherals */

  MX_GPIO_Init();               /* STM32CubeMX生成的GPIO初始化函数 */

  MX_USART1_UART_Init();        /*  STM32CubeMX生成的USART1初始化函数 */

  MX_USART2_UART_Init();       /*  STM32CubeMX生成的USART2初始化函数 */

  /* USER CODE BEGIN 2 */

printf("nr Creating Task1 nr"); /* 我添加的语句。在串口初始化结束后从串口输出的字符。*/

  /* USER CODE END 2 */


  /* Call init function for freertos objects (in freertos.c) */

  MX_FREERTOS_Init();         /* STM32CubeMX生成的操作系统内核初始化函数 */


  /* Start scheduler */

  osKernelStart();              /* 启动调度器 , 由调度器控制任务执行。下面的 while() 语句是走不到了*/

  

  /* We should never get here as control is now taken by the scheduler */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */


}

  /* USER CODE END 3 */


}


freertos.c

增加包含头文件

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */     

#include "stm32f0xx_hal.h"     /* 我增加的,否则不认识 printf */


/* USER CODE END Includes */



STM32CubeMX 定义的任务句柄


osThreadId defaultTaskHandle;        /* 缺省的空闲任务句柄 */

osThreadId myTask1Handle;          /* 我需要的 myTask 1 任务句柄 */



STM32CubeMX 声明的任务函数原型


void StartDefaultTask(void const * argument);

void StartTask1(void const * argument);



STM32CubeMX 定义和创建的任务


  /* definition and creation of defaultTask */

  osThreadDef(defaultTask, StartDefaultTask, osPriorityIdle, 0, 128);   

  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);


  /* definition and creation of myTask1 */

  osThreadDef(myTask1, StartTask1, osPriorityNormal, 0, 128);

  myTask1Handle = osThreadCreate(osThread(myTask1), NULL);


空闲任务啥也没干


void StartDefaultTask(void const * argument)

{


  /* USER CODE BEGIN StartDefaultTask */


/* Infinite loop */

  for(;;)

  {

    osDelay(1);

  }

  /* USER CODE END StartDefaultTask */

}



任务1输出字符串


void StartTask1(void const * argument)

{

  /* USER CODE BEGIN StartTask1 */

  /* Infinite loop */

  for(;;)

  {

printf("Task 1 is runing rn");       /* 已经重定向printf到USART2,参见《用STM32Cube+Keil5对STM32F0编程之通过USART发送数据》](https://blog.csdn.net/aLife2P6/article/details/82918298) */

    osDelay(3000);   /* 延时3s */

  }

  /* USER CODE END StartTask1 */

}


编译链接 Project/Build Target

编译链接过程图

烧录程序 Flash/Download

烧录程序过程图

运行效果

PC机接收到的数据截图



关键字:STM32Cube  FreeRTOS  Keil5  STM32F0  USART  发送数据 引用地址:用STM32Cube+FreeRTOS+Keil5对STM32F0编程之通过USART发送数据

上一篇:STM32学习笔记(1)如何移植FreeRTOS
下一篇:学习笔记——FreeRTOS任务的创建(动态方法)

推荐阅读最新更新时间:2024-11-05 23:39

STM32的USART发送数据时如何使用TXE和TC标志呢?
USART 是 STM32 中非常重要的外设之一,用于串行通信,其中包括串口通信(RS232、RS485)、SPI 和 I2C 等多种串行通信协议。USART 在 STM32 中有多个实例,包括 USART1、USART2 等,其特性和功能也不完全相同。 在发送数据时,USART 需要使用 TXE 和 TC 标志位。TXE 表示数据寄存器空,表示 USART 数据发送寄存器中的数据已被全部发送出去,可以直接写入新的数据。TC 标志表示传输完成,表示 USART 发送完全部数据,且寄存器都为空。 下面我们来看一下 STM32 的 USART 发送数据时如何使用 TXE 和 TC 标志位。 1.USART 数据寄存器有两种模式:8 位
[单片机]
stm32 usart奇偶校验如何配置
stm32 usart奇偶校验如何配置?或许你在stm32 usart奇偶校验过程中会遇到如下一些坑,stm32 usart偶校验错误标志位以及出现偶校验错误,奇偶校验位包含在数据位中等等这些可能是你将错误的数据放到DR寄存器中导致的。 在一般情况下,stm32 usart奇偶校验无校验位时,数据位常用8位,当使用就校验位时,数据位应设置为9位。stm32 usart奇偶校验配置方法主要有以下几种: stm32 usart奇偶校验如何配置?如果stm32 usart开启奇偶校验,应在读取数据寄存器时先查看标志位,或者及时进行应用逻辑代码处理,以免发生校验错误标志则丢弃数据等情况出现造成不必要的损失。
[单片机]
stm32 <font color='red'>usart</font>奇偶校验如何配置
STM32F103之DMA实验,内存通过DMA向串口1发送数据
#include dma.h ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// DMA_InitTypeDef DMA_InitStructure; u16 DMA1_MEM_LEN;//保存DMA每次数据传送的长度 //DMA1的各通道配置 //这里的传输形式是固定的,这点要根据不同的情况来修改 //从存储器- 外设模式
[单片机]
stm32cube生成的keil5工程添加group时死机
通过摸索实践,找到一个可用的方法: 在New Group上点右键,选择Manage Progect Item...,可修改group name,也可添加item。
[单片机]
<font color='red'>stm32cube</font>生成的<font color='red'>keil5</font>工程添加group时死机
S3C2440-裸机篇-06 | UART数据发送接收实验(扫描模式)
关于RS-232C串口总线通信标准请参见我的另一个系列专题文章: 【嵌入式系统通信协议②】EIA RS-232C串口总线标准 实验 —— UART数据收发实验 1. 看原理图确定UART硬件如何连接 由原理图可以看出,JZ2440开发板上将三个串口全部引出,其中UART0设置了板载的USB转串口电路,只需连接板上的USB口就可以,所以接下来我们使用UART0进行数据收发实验。 2. 看芯片手册设置引脚复用功能(GPHCON)、开启片内上拉(GPHUP) 由原理图可以看出,UART0的引脚是: GPH2:TXD0 GPH3:RXD0 这两个引脚都是普通的GPIO口,所以需要设置引脚复用功能,作为串口UART0的
[单片机]
S3C2440-裸机篇-06 | UART<font color='red'>数据</font><font color='red'>发送</font>接收实验(扫描模式)
RS232异步串行通信USART电路设计
简介:AVR系列单片机都带有异步串行接口,而我们现在学习的ATmega64更是有两个串口。我们知道单片机的电平一般都是TTL电平(关于TTL电平与 CMOS电平等其他电平的区别,我们以后单独详解),而计算机的串口是RS-232电平,这两种电平不能互相匹配,所以如果将这两种电平互联,需要一个电平转换电路,本实例中使用常用的MAX232芯片,它实现RS-232电平和TTL电平的互换。 在MAX232的数据手册中,有这个芯片的典型连接电路,我们直接采用这种电路即可。关于MAX232的连接电路,其实非常简单,我们只要记住4电容(或 5电容)就可以了。这里的4电容指的是电路中只需要连接4个电容就可以;至于5电容,多出来的那个电容是连接V
[单片机]
RS232异步串行通信<font color='red'>USART</font>电路设计
STM32F4之USART
STM32F407xx内嵌四个通用同步/异步接收器(USART1,USART2,USART3 和USART6)和两个通用异步收发器(UART4和UART5)。这6个接口提供异步通信的IrDASIR ENDEC支持,多机通信模式,单线半双工通信模式LIN主/从功能。 USART1和USART6接口能够速度高达10.5 Mbit / s的通信其他可用的接口通信高达5.25bit/s。USART1,USART2,USART3和USART6还提供硬件管理的CTS,RTS信号,智能卡的模式(ISO7816兼容)和类似的SPI通信能力。所有接口都可以通过DMA控制器。 这里只使用了两根线的最简单串口设置。 硬件环境:STM32
[单片机]
STM32 UART/USART 的差别
stm32中 uart 是比较常用的, 在使用 HAL时发现了 uart / usart, 原来用一直都没有太注意, 现在有闲时整理一下. 1、UART:universal asynchronous receiver and transmitter通用异步收发器, 仅需要 RX / TX 接口. 2、USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器, 除了 TX/RX 之外, 还额外需要一个 CLK 的 PIN 脚. 也就是说:UART的一般只能用于异步串行通讯,而名称为USART的既可以用于同步串行通讯,也能用于异步串行通讯。 在
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved