历史上的今天
返回首页

历史上的今天

今天是:2025年07月26日(星期六)

正在发生

2019年07月26日 | STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程

2019-07-26 来源:eefocus

硬件:机智云STM32平台V2.1 

软件:cube MX+keil MDK-ARM V5


机智云的STM32开发平台小巧玲珑,用起来也顺手,所以就将正点原子的战舰开发板扔一旁吃灰了。目前刚开始学习,用到的硬件资源也不多,后续做相关实验时说不准又捡起来了。


1.简单介绍一下cube MX的使用

下载安装的过程就不在赘述,直接开始使用。 

双击打开cube MX,点击新建工程 

这里写图片描述


由于本底板的MCU型号是:STM32F103C8T6,所以按照下图来选择就对了。这个根据当时自己使用的MCU型号来对应选择就好了。 

 这里写图片描述 

接着就是资源配置界面了, 

这里写图片描述

1、先配置RCC的时钟源为外部高速时钟 

这里写图片描述

2、配置时钟系统,其实很简单,直接将HCLK设置为72MHz,其他的会根据此自动选择。这幅时钟配置图还是很直接明了,对学习STM32时钟系统有很好的借鉴意义。 

这里写图片描述

3、配置对应的LED灯的端口GPIO为输出模式。 

LED原理图: 

 LED原理图 

接着在cube MX中配置对应的LED的IO为输出模式。 


这里写图片描述
这里写图片描述
这里写图片描述 
这里写图片描述

接下来生成代码,同时也要保存此工程,方便下次接着添加相关功能。 

这里写图片描述
生成代码相关配置 
这里写图片描述 

最后点击“OK”,生成相关代码。 

生成的工程文件


使用keil打开工程,找到main.c。如下,在while(1)中添加LED灯闪烁的代码。


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();


  /* Configure the system clock */

  SystemClock_Config();


  /* Initialize all configured peripherals */

  MX_GPIO_Init();


  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


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

  MX_FREERTOS_Init();


  /* Start scheduler */

  osKernelStart();


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


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

        //自己添加的LED闪烁代码

        HAL_Delay(400);

        HAL_GPIO_WritePin(led1_GPIO_Port, led1_Pin, GPIO_PIN_SET);

        HAL_GPIO_WritePin(led2_GPIO_Port, led2_Pin, GPIO_PIN_SET);

        HAL_GPIO_WritePin(led3_GPIO_Port, led3_Pin, GPIO_PIN_SET);

        HAL_GPIO_WritePin(led4_GPIO_Port, led4_Pin, GPIO_PIN_SET);

        HAL_Delay(400); 

        HAL_GPIO_WritePin(led1_GPIO_Port, led1_Pin, GPIO_PIN_RESET);

        HAL_GPIO_WritePin(led2_GPIO_Port, led2_Pin, GPIO_PIN_RESET);

        HAL_GPIO_WritePin(led3_GPIO_Port, led3_Pin, GPIO_PIN_RESET);

        HAL_GPIO_WritePin(led4_GPIO_Port, led4_Pin, GPIO_PIN_RESET);


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */


  }

  /* USER CODE END 3 */


}


编译得到hex文件,烧录到机智云的STM底板中,看到四个LED开始闪烁了。


至此,cube MX初体验完成。


总结一下:cube MX用起来非常顺手,尤其是添加一些中间件的时候,如RTOS 、 fatfs 、tcp/ip等等。真的是非常的方便,之前自己移植老半天,费劲不说,还经常出错。现在有了这个工具就轻松多了,但是带来的一点是库函数完全不一样了,至少我读写IO的函数是变了,不过不要紧,后续适应一下就行了。 

开发工具越来越向着屏蔽硬件接口层的方向发展,从最初的寄存器编程到后来的库函数编程再到现在的图形界面编程,对嵌入式开发程序员的要求越来越低,入门门槛越来越低。对厂商推广自己的芯片固然是一件好事,但是于我们而言,自己接触底层的机会越来越少,真的底层出了问题,根本不会解。所以使用哪种方式来编程,仁者见仁智者见智。结合自己的实际环境适当选择吧。


下一节介绍如何基于此创建一个LED灯闪烁任务。


完!


推荐阅读

史海拾趣

Honeywell公司的发展小趣事

背景:进入21世纪后,霍尼韦尔继续秉承多元化发展战略,不断拓展新的业务领域。

发展:公司通过一系列并购和投资活动,进入了石油化工、高性能材料、医疗、安防等多个领域。其中,2005年收购环球油品公司(UOP)和2007年收购码捷科技(Metrologic Instruments)是公司多元化战略的重要里程碑。

关键事件:这些并购不仅增强了霍尼韦尔的技术实力和市场竞争力,还为公司带来了新的增长点和发展机遇。

台湾双羽公司的发展小趣事

1954年,富士通研发出了日本第一台中继式自动计算机FACOM100,这一里程碑式的成就标志着富士通正式涉足信息产业。FACOM100的推出不仅在日本国内引起了轰动,也让富士通在国际上赢得了声誉。此后,富士通在计算机领域持续投入研发,不断推出新技术、新产品,逐渐成长为全球领先的计算机制造商之一。这一转变不仅推动了富士通自身的快速发展,也为全球计算机技术的进步做出了重要贡献。

Astema公司的发展小趣事

随着技术的不断成熟,Astema开始积极拓展市场。公司制定了一系列市场策略,包括与大型电子设备制造商建立合作关系、参加国际电子展等,以扩大品牌影响力。通过这些努力,Astema逐渐打开了国际市场的大门,其产品远销海外,市场份额稳步提升。

浙江凡华(FANHAR)公司的发展小趣事

随着技术的不断成熟,Astema开始积极拓展市场。公司制定了一系列市场策略,包括与大型电子设备制造商建立合作关系、参加国际电子展等,以扩大品牌影响力。通过这些努力,Astema逐渐打开了国际市场的大门,其产品远销海外,市场份额稳步提升。

Ampire Co Ltd公司的发展小趣事

Astema公司自创立之初,就专注于研发创新的电子技术。公司投入大量资源于研发部门,不断推出具有竞争力的新产品。其中,一款具有高效能、低功耗特点的芯片产品,在市场上获得了巨大成功,为公司带来了可观的收入。这一成功促使Astema在行业内建立了良好的声誉,吸引了更多的客户和合作伙伴。

Euvis Inc公司的发展小趣事

在技术创新的基础上,Euvis Inc公司积极拓展市场,通过与国际知名电子产品制造商的合作,将其产品应用于各类高端电子产品中。同时,公司注重品牌建设,通过一系列营销活动提升品牌知名度和美誉度。随着市场份额的不断扩大,Euvis Inc公司逐渐在电子行业中树立起了高端、可靠的品牌形象。

问答坊 | AI 解惑

protel dxp 批量修改同类元件参数

protel dxp 批量修改同类元件参数…

查看全部问答>

推荐八本AVR单片机经典图书

1. AVR单片机原理及应用 【内容简介】 本书在概述ATMEL公司开发的AT89系列、AT90系列、AT91M系列单片机之后,详细介绍了AVR增强型RISC单片机的结构、指令系统、90系列多种单片机、实用程序设计以及AVR单片机的应用实例,最后介绍了AVR单片机 ...…

查看全部问答>

8051单片机实践与应用

8051单片机实践与应用:希望对大家有帮助!…

查看全部问答>

代码问题分析----时序错误

sdram的时序问题  state_cntrl_sig 在非idl_cycle下每个时钟加1 哪位高手能告诉我下为什么下面的state_cntrl_sig要计到那时候才变为空闲周期 WHEN  idl_cycle => IF (cmnd_cycle_req = \'1\') THEN      &nbs ...…

查看全部问答>

触摸屏校准,高手请进!

1.触摸屏校准后,很准确,但是重启系统后,发现整体向有偏,怎么办,软件怎么算出差值啊??…

查看全部问答>

6410 NK运行与USB下载问题?

我现在自己做了块6410的板子,现在的情况是这样的:在三星提供的BSP中,NK有三种速度,第一种是532MHz,133MHz,66.5MHz,第二种是600MHz,150MHz,75MHz,第三种是666MHz,133MHz,66.5MHz。我用第1和第3种运行NK运行都有问题,刚开始就会出再好多报错, ...…

查看全部问答>

学习8051和MSP430 的优势比较

国的多数读者对89C51系列的单片机是很熟悉的,为了加深对 MSP430 系列单片机的认识,我对两者进行一下比较。    第一,89C51单片机是 8 位单片机。其指令是采用的被称为“ CISC ”的复杂指令集,共具有  ...…

查看全部问答>

传感器与变送器的不同之处

传感器是能够受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置的总称,通常由敏感元件和转换元件组成。当传感器的输出为规定的标准信号时,则称为变送器。    变送器的概念是将非标准电信号转换为标准电信号的仪器,传感器则是 ...…

查看全部问答>

SINM900A模块问题

紧急求助。 有朋友用过sim900A模块吗? 目前手里边就只有一个硬件设计手册,还有一个AT指令集。 貌似需要一个软件设计手册才够。 有哪位朋友曾经开发过,请给点意见。 时间很紧急呀。。。谢谢大家…

查看全部问答>