STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程

2023-05-16

硬件:机智云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不再闪烁,表明系统已经切换到freertos 的任务调度器里了。

至此,cube MX初体验完成。

总结一下:cube MX用起来非常顺手,尤其是添加一些中间件的时候,如RTOS 、 fatfs 、tcp/ip等等。真的是非常的方便,之前自己移植老半天,费劲不说,还经常出错。现在有了这个工具就轻松多了,但是带来的一点是库函数完全不一样了,至少我读写IO的函数是变了,不过不要紧,后续适应一下就行了。
开发工具越来越向着屏蔽硬件接口层的方向发展,从最初的寄存器编程到后来的库函数编程再到现在的图形界面编程,对嵌入式开发程序员的要求越来越低,入门门槛越来越低。对厂商推广自己的芯片固然是一件好事,但是于我们而言,自己接触底层的机会越来越少,真的底层出了问题,根本不会解。所以使用哪种方式来编程,仁者见仁智者见智。结合自己的实际环境适当选择吧。

我在学习开发过程中,注释了freertos的源码,请移步GitHub参阅。如果对你有帮助,请给star鼓励作者辛勤付出。

完!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程 的相关文章

随机推荐

  • QT无人机地面站设计与制作随笔总结

    自己不是专职地面站设计 xff0c 这里简单将经验叙述下 xff08 另外把自己一直空缺着的QT分类补一篇文章 xff09 无论是处于地面站学习的过程还是做项目进行重新整体设计 xff0c 对于这种写代码的过程最好先在MindMaster中
  • 矩阵该左乘还是右乘

    首先说明一点 xff0c 矩阵具有几何意义 xff0c 对于这几何意义的具体理解可看B站的 线性代数的本质 的视频讲解 开始展开议题 为理解记忆这个问题 xff0c 可以从方向余弦矩阵开始着手 xff0c 方向余弦矩阵是由三次旋转矩阵顺序乘
  • 《绿皮书》影评

    以一种看经典的心态看这部电影 xff0c 确实这部电影没有让我失望 很经典 xff0c 很深刻 xff0c 可能每个人都有各自的认知 xff0c 各自的感受 而我感受到了主人公如同城市孤独人的孤独感 或许 xff0c 遭受肉体上的折磨和伤害
  • Cannot find module 'body-parser'

    bug Cannot find module 39 body parser 39 原因很明显 xff0c 这个模块是没有的 xff0c 查看node modules目录下 xff0c 确实没有 解决办法 xff1a 重新安装这个模块 xff
  • gitlab安装和使用--让我们的版本管理可视化

    一 安装环境 xff1a centos6 7实验2G xff0c 生产4G安装包下载 xff08 需要翻墙 xff0c 不然下载很慢 xff09 xff1a https packages gitlab com gitlab gitlab c
  • STM32CubeMX基本使用

    视频 https www bilibili com video BV11t41147wc from 61 search amp seid 61 9347368692610984203 前言 在配置好CubeMX之后 xff0c 就是新建工程
  • make 命令

    https www ibm com support knowledgecenter zh ssw aix 71 com ibm aix cmds3 make htm 用途 维护 更新和重新生成程序组 语法 make DVariable d
  • Opencv求轮廓的中心点坐标

    Opencv求轮廓的中心点坐标 思路 xff1a 1 通过findContours找出图片中的轮廓 xff1b 2 minAreaRect找到最小外接矩形 xff1b 3 得到最小外接矩形的中心点坐标作为轮廓的中心坐标 xff1b cv s
  • 路由器二次开发一步一步把工业路由器变成一个高端的可指定出网、节点和链路的路由器,包含详细过程及快捷脚本(四)

    路由器二次开发一步一步把工业路由器变成一个高端的可指定出网 节点和链路的路由器 包含详细过程及快捷脚本 四 如果没有 路由器 可以采用 废旧的电脑 详细环境部署参考第 一 篇文章 这里采用800米的工业路由器j1900进行二次定制开发 可以
  • 路由器二次开发一步一步把工业路由器变成一个高端的可指定出网、节点和链路的路由器,包含详细过程及快捷脚本(五)

    路由器二次开发一步一步把工业路由器变成一个高端的可指定出网 节点和链路的路由器 包含详细过程及快捷脚本 五 如果没有 路由器 可以采用 废旧的电脑 详细环境部署参考第 一 篇文章 这里采用800米的工业路由器j1900进行二次定制开发 可以
  • 应用windows批处理嵌套复制文件夹

    作者 xff1a 朱金灿 来源 xff1a clever101的专栏 为什么大多数人学不会人工智能编程 xff1f gt gt gt 应用windows批处理文件将一个文件夹下的多个子文件夹复制到另一个文件夹下 xff0c 代码如下 xff
  • FreeRTOS代码剖析之4:内存管理Heap_4.c

    FreeRTOS8 0 1内存管理的最后一个堆模型Heap 4 xff0c 貌似是在这一个版本才有的 所以找到的说明几乎没有 代码的开头注释也只是简单地说了一下实现了pvPortMalloc 和vPortFree 两个函数 xff0c 并且
  • 如何在 Ubuntu 上安装 Python 3.8

    Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 Python是世界上使用最广泛的编程语言之一 xff0c 由于其简单易学的语法 xff0c Python是初学者和有经验的开发者的热门选择 xff0c Python是一种相
  • (三)OpenCV中的图像处理之轮廓

    注释 xff1a 本文翻译自OpenCV3 0 0 document gt OpenCV Python Tutorials xff0c 包括对原文档种错误代码的纠正 该章节分为以下四个小节 xff1a 一 Contours xff1a Ge
  • Arduino UNO+ESP8266 WIFI+USB转TTL连接线使用EDP协议控制LED灯

    Arduino是许多智能硬件爱好者的首选 xff0c 使用简单快捷 xff0c 而ESP8266模块也是当前最为热门的WIFI模块 本项目完成了Arduino使用EDP协议通过ESP8266 WIFI模块接入OneNET服务器 xff0c
  • 智工运维定位器之ublox

    一 xff0c 概述 GNSS芯片选用了ublox的 UBX M8030 系列 xff0c 有3个型号 xff1a 可以到官网去下载相关资料 xff0c 文档还挺齐的 xff1a https www u blox com zh produc
  • Arduino修改Serial接收缓冲区大小

    Arduino串口默认只接收64字节到缓冲区 xff0c 之后接收到的数据直接丢弃 xff0c 那么在发送 接收不同步的情况下 xff0c 传输数据过大就会丢数据了 xff01 并且当数据超过64字节后 xff0c 是丢弃后面的数据 xff
  • C语言字符串查找基础----strchr()、strrchr()、strpbrk()、strstr()

    1 查找一个字符 在一个字符串查找一个特定字符最容易的方法是使用strchr和strrchr函数 xff0c 原型如下所示 xff1a char strchr char const str int ch char strrchr char
  • STM32WB-硬件介绍

    1 系统和存储 1 1 系统总览 STM32使用双核架构 xff0c 一个cortex m4核负责app程序开发 xff0c 一个cortex m0核负责射频协议栈 xff0c 还有一个radio子系统负责RF部分 1 2 STM32WB总
  • STM32+freeRTOS学习笔记-1.使用cube MX创建一个freeRTOS的keil工程

    硬件 xff1a 机智云STM32平台V2 1 软件 xff1a cube MX 43 keil MDK ARM V5 机智云的STM32开发平台小巧玲珑 xff0c 用起来也顺手 xff0c 所以就将正点原子的战舰开发板扔一旁吃灰了 目前