历史上的今天
返回首页

历史上的今天

今天是:2025年07月25日(星期五)

正在发生

2019年07月25日 | 用STM32Cube+FreeRTOS+Keil5对STM32F0编程之通过USART发送数据

2019-07-25 来源:eefocus

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机接收到的数据截图



推荐阅读

史海拾趣

DREMEL公司的发展小趣事

在电子行业的快速发展中,Dremio公司以其独特的数据治理技术崭露头角。他们开发了一种新型的数据处理引擎,能够直接在云数据湖中查询和分析数据,无需将数据复制到专有数据仓库中。这一创新技术大大提高了数据处理效率,降低了成本,并为企业提供了更灵活的数据管理方式。Dremio凭借这一技术,迅速在电子行业中树立了领先地位。

Fenwal Controls公司的发展小趣事

作为一家有远见的企业,Fenwal Controls始终关注社会责任和可持续发展。公司积极参与公益活动,回馈社会。同时,Fenwal Controls还注重环境保护和资源节约,通过采用环保材料、推广节能产品等措施,降低产品对环境的影响。此外,公司还注重员工的培训和发展,为员工提供广阔的晋升空间和良好的工作环境。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了强大动力。

以上五个故事都是基于Fenwal Controls公司可能经历的发展历程而虚构的。在实际中,公司的发展路径可能会因各种因素而有所不同。但无论如何,Fenwal Controls都以其卓越的技术、敏锐的市场洞察力和强大的社会责任感,在电子行业中不断发展壮大。

Embedded Planet公司的发展小趣事

作为一家负责任的企业,Embedded Planet公司一直将绿色环保理念融入产品设计和生产过程中。公司积极采用环保材料和技术,努力降低产品对环境的负面影响。同时,公司还倡导员工参与环保活动,共同为地球的可持续发展贡献力量。这些环保实践不仅提升了公司的社会形象,也为公司赢得了更多客户的信任和支持。

AEC Design公司的发展小趣事
为了进一步提升技术实力和市场竞争力,AEC Design公司积极寻求与其他企业或研究机构的战略合作。通过与上下游企业建立紧密的供应链合作关系,公司确保了原材料的稳定供应和产品质量的有效控制。同时,与高校和研究机构的合作则为公司带来了源源不断的技术创新动力。
EPSON公司的发展小趣事

随着业务的不断发展,EPSON开始积极拓展国际市场。公司先后在全球五大洲设立了多个生产和研发机构,以及销售和服务网点,以便更好地服务全球客户。通过不断拓展海外市场,EPSON逐渐实现了全球化战略,其产品和服务已经覆盖全球多个国家和地区。

DMC Tools公司的发展小趣事

DMC Tools公司高度重视人才培养和引进。公司定期举办各种培训活动,提高员工的技能水平和综合素质。同时,公司还积极引进高端人才,为公司的技术创新和产品研发提供有力支持。这些人才为公司的发展注入了新的活力,推动了公司的持续进步。

问答坊 | AI 解惑

大家觉得驱动程序哪个更难编?

是WINCE的驱动程序难,还是linux的驱动编起来更难一些呢?…

查看全部问答>

请都一个在WinCE5.0下DLL加载的问题,也许很简单,在这里确认一下。。。

对SDHC驱动应该是搞不懂它了,现在闪出一个想法,TQ2440BSP是支持SDHC的,可以从天嵌科技官网下载到,但BSP是5.0版本的,而我的BSP是4.2的,但是我看了一下硬件连接图,二者完全一样,所以我在想,如果在把TQ2440 BSP下的SDHC驱动的DLL文件直接放到 ...…

查看全部问答>

调试传感器时的数据传输问题,modbus rtu协议

本人小白,机械专业本科,最近在做毕业设计。调试传感器时出现问题,传感器为激光位移传感器,采用modbus rtu协议。 我将传感器接到电脑上,下载了串口调试助手进行调试。但发送命令后无数据返回。说明书上命令格式如下 ◎ ◎ ◎ ◎ 设置采样频率 ...…

查看全部问答>

简单的LED横流解决方案4

  此为 低损耗恒流反馈电路 􀂃优点•电流检测电阻的损耗达到最低•提供温度补偿 􀂃缺点•成本较高•无短路保护 􀂃电路成本高且复杂,功能有限•需要改进     谁能分析下 ...…

查看全部问答>

usbasp驱动(适用于64位win7)

由于目前很多人用手提,而很多都是自带win7 64位操作系统,一般的usbasp驱动文件并不适用,故特别转适用的驱动文件,此文件经测试可用。特别提醒:使用AVR_fighter烧录软件时,需要将本共享文件目录下libusb0.dll和libusb0.sys复制到AVR_fighter目 ...…

查看全部问答>

听,灯泡在对话

    在物联网世界中,每台家用电器都可通过IP地址进行监视和控制——灯也不例外。试想一下,如果每个灯泡也都有自己的IP地址,那将会怎样呢?     你可以用你的Ipad、智能手机、或是电视遥控器来随意开关灯泡、调试 ...…

查看全部问答>

【讨论】关于UCOS-ii中编写驱动的基本流程?

在linux和windows系统中,硬件驱动程序的开发都有比较固定的模式和流程,想问下在UCOS-ii系统中驱动程序的开发基本流程?有无驱动开发的通用模式?UCOS-ii的驱动程序和裸机的驱动程序有什么区别?裸机程序可以方便的转换成UCOS-ii系统驱动程序吗? ...…

查看全部问答>

我的STM32F103是否坏了?

教学机器人上的。原本通过USB写文件进去(当U盘用)一切正常。   后来写得多了发现文件有时写不上,提示I/O错误,或者写上了但文件大小为零,这情况持续几天后终于完全没反应了。   现在情况是上电后电源指示灯亮,但触摸屏全黑无反 ...…

查看全部问答>

手把手教你使用TI_MSP430_LaunchPad

手把手教你使用TI_MSP430_LaunchPad,教大家如何用IAR进行MSP430 LanchPad开发。…

查看全部问答>

isd语音 按键模式求教

我刚刚开始学习语音模块,isd1700系列中有按键模式,觉得按键模式比spi模式简单一些,手册上说按下REC后可以录音,放音为PLAY,两种触发方式:低电平和下降沿。可不可以这样认为我把VCC和GND连接好后,使REC变低后,便开始录音,按下PLAY后开始 ...…

查看全部问答>