目录

一、STM32CubeMX安装

二、创建项目

三、开启时钟配置外设

3.1配置时钟

3.2配置USART1

3.3配置SYS

3.4freertos配置和任务添加

四、代码生成

4.1重写串口程序并通过软件调试进行测试

4.1调试程序


一、STM32CubeMX安装

这是我第一次做开源项目,因为某些原因需要学习FreeRtos的知识,在自己学习的同时,也记录一下过程和开发的心得,读者共勉,有不足的地方希望大家可以指出来,相互学习。

要使用FreeRTOS当然可以通过移植源码,创建任务的方式去做,事在人为,我选择用CubeMX的原因还是觉得这个工具在初始化一些硬件和创建进程是比较便捷的,用起来也比较舒服。废话不多说,开始安装。

首先需要下载STM32CubeMX,下载的方式比较多,可以参考其他博主的博文。我这里直接用的是我一直用的,软件分享链接:http://链接:https://pan.baidu.com/s/1gU6ObwIAORT8t7Lmv12miA 提取码:0927

下载解压后可以看到有两个主要的,一个是java环境,没错cubemx是需要java环境的,自行安装即可,第三个就是CubeMX本体双击打开:

然后开始安装

然后等待安装完成后,双击打开:

点击HELP->manage mebedded...选择你所需要的芯片类型,后续如果需要添加芯片类型也可以在此处添加。

 等待安装完成即可

二、创建项目

选择Start My project from mcu->ACCESS TO MCU SELECTOR 选择你需要使用的MCU类型

在Part number窗口搜索你所需要的MCU类型,然后再MCUs/MPUs List1处打开

等待新建完成,如下

Categories按照芯片的功能分类,可以选择你需要的功能。或者可以点击PinoutView中芯片的引脚去设置芯片的状态。在此之前,我的习惯是先设置Project manager里面的内容,在project目录配置生成工程的名称、代码路径、Toolchain。。路径等等。

在code Generator中选择Generate Peripheral initialization as .....将外设初始化生成为每个外设的一对 .c.h 文件.

三、开启时钟配置外设

3.1配置时钟

因为我用的电路板是自己画的,所以为了节省成本等等一系列的问题,我选择了C8T6的48角MCU外接8MHz的晶振。通过选择RCC的HSE告诉时钟的外部时钟。开启MCU的时钟。

然后配置时钟,在ClockConfiguration里面配置APB1/APB2等外设的时钟,设置APB1为最大36MHz,APB2最大为72MHz。

3.2配置USART1

开启串口USART1,用于调试时打印串口信息。

3.3配置SYS

然后开启SYS的时钟,我选择的是TIM3,因为TIM2和TIM4用来捕获时钟等功能,不开启有警告发生,具体什么,感兴趣的可以试一下。

3.4freertos配置和任务添加

其实现在就可以生成HAL库去做裸机实验了,我要学习的是加上操作系统FreeRtos的配置主要目的是学习操作系统的生成和使用。所以,配置FreeRtos。

选择Freertos interface 的CMSIS_V1。接下来添加你需要的进程即可。在Configuration的Tasks and Queues中添加。

添加自己需要的进程,平衡车,第一需要的肯定是数据采集进程,根据上图的解释可以简单添加一下任务的名称、优先级、入库口函数、栈大小等。先使用默认即可,后面如若需要更大的栈也可回来自己修改。然后点击添加PID获取的进程。如下:

至此,配置就告一段落。点击右上角的GENRATE CODE即可生成代码。可能会有点慢,等他生成就可以用了。生成以后会弹出一个窗口,点击Open Project,就可以通过MDK打开。

四、代码生成

编译完成后可以看到MX_FREERRTOS_Init()等一系列的初始化函数。

打开后该文件后可以看见创建的任务和两个任务具体要干的事情(需要自己去写)。

4.1重写串口程序并通过软件调试进行测试

我们在配置好以后,就需要重写fputc函数,目的是通过Printf打印信息。代码如下。

//fputc重定义目的是为了使用printf通过串口打印出来
int fputc(int ch, FILE *fp)
{while(!(USART1->SR & (1<<7)));USART1->DR = ch;return ch;
}

本质上也是调用DR寄存器,有个点需要注意,就是在使用FILE时要添加stdio.h的头文件。不然会unkown type name ’FILE'报错。

4.1调试程序

写好后在两个进程中分别添加打印信息,看看是否能正常运行到进程中。可以先通过软件测试的方式。代码如下:

/* USER CODE END Header_StartGetDataTask */
void StartGetDataTask(void const * argument)
{/* USER CODE BEGIN StartGetDataTask *//* Infinite loop */for(;;){osDelay(200);printf("数据采集任务\r\n");}/* USER CODE END StartGetDataTask */
}/* USER CODE BEGIN Header_Start_GetPIDTask */
/**
* @brief Function implementing the myTask_GetPID thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_Start_GetPIDTask */
void Start_GetPIDTask(void const * argument)
{/* USER CODE BEGIN Start_GetPIDTask *//* Infinite loop */for(;;){osDelay(200);printf("PID采集任务\r\n");}/* USER CODE END Start_GetPIDTask */
}

也需要在该文件夹下添加stdio.h文件,不然会有隐式申明警告,然后编译。

然后配置魔术棒里面的软件调试先软件调试是否能打印。

要注意的是需要修改 Dialog DLL中的信息将DCM.DLL修改为DARMSTM.DLL,Parameter中的-pCM3修改为-pSTM32F103ZE即可。然后进行调试,在main函数里打断点。然后开启软件串口1

View->serail windos 选择UART#1

然后全速运行,观察是否有对应的信息

可以看到,进程执行是没有问题的,因为我的板子打样还没回来,所以烧录等一系列的实验后续再出,时间关系,就到这!!!欢迎各位大佬指出不足。

使用STM32CubeMX+freeRtos+MDK开发平衡小车(第一篇)相关推荐

  1. 基于stm32c8t6的两轮平衡小车 第一篇——物料选购

    本人在最近在实习摸鱼期间尝试了一下PID平衡小车,在做的过程中遇到了许多问题,由于我是开始做之前完全是一个小白(都到大四实习期了,还是个小白 ,是不是很搞笑,所以在这里劝大家大学期间还是要好好学习 , ...

  2. 微信公众号开发入门教程第一篇

    微信公众号开发入门教程第一篇 关键字:微信公众平台开发 作者:方倍工作室 在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/ ...

  3. Python全栈开发记录_第一篇(循环练习及杂碎的知识点)

    Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...

  4. iOS开发小牛的第一篇日志

    前言: 人生的第一篇博客,也不知道写点什么,说实话,只是想把我自己学习开发这一路上的点点滴滴都记录下来,或许做不到一天一篇博客,但是希望可以每天进步一点吧. 第一篇博客,我想把我整理的一些最简单的控件 ...

  5. IOS开发高手课第一篇 构建自己的IOS开发知识体系

    开篇词 | IOS开发锚定一个点,然后在这个点上深耕 你好,我是戴铭,欢迎你加入我的 iOS 开发专栏. 说起 iOS 开发,自然是绕不开 iPhone 和 App Store 这两个词.多少年过去了 ...

  6. 基于stm32c8t6的两轮平衡小车 第二篇——原理图及CubeMx配置

    目录 1.原理图 2.CubeMx配置 (1)创建工程 (2)配置时钟树 (3)仿真模式选择 (4)TIM2配置为PWM输出模式 (5)定时器TIM3,TIM4设置为编码器模式 (6)蓝牙串口配置 ( ...

  7. C++开发斗地主(QT)第一篇之数据结构

    斗地主,是一种在中国流行的纸牌游戏.游戏最少由3个玩家进行,用一副54张牌(连鬼牌),其中一方为地主,其余两家为另一方,双方对战,先出完牌的一方获胜.如今已风靡整个中国,并流行于互联网上! 从今天开始 ...

  8. 手机网站开发(WAP网站)第一篇

    现在的互联网,可以说是名副其实的移动互联网.大家不仅可以利用无线网卡随处随地上网,还可以直接利用手机浏览网页.下载文件,而且现在的无线运营商也正在大力发展无线网络.扩展手机上网带宽.    于是,手机 ...

  9. 测试开发之测试方法第一篇

    一. 测试方法的分类  静态测试方法  动态测试方法 1 静态测试方法  不执行程序的测试方法.  主要用于测试文档和代码(文档). 2 动态测试方法 通过运行程序来发现缺陷的测试方法.  ...

最新文章

  1. 给妹子讲python-S01E18初探函数作用域
  2. python重复元素判定编程_从零开始学Python编程四:条件判断与循环
  3. Oracle闪回原理-Logminer解读redo(r11笔记第17天)
  4. 十九、前端必学Bootstrap美化(下篇)
  5. 三种Cache写入方式原理简介
  6. SQL Server2008数据库用户管理 (第三部分)
  7. Oracle 11G 64位发布出现错误
  8. mybaitis动态sql利用bind标签代替%拼接完成模糊查询
  9. Unknown collation: #39;utf8mb4_unicode_ci#39;
  10. linux的pending状态怎么退出,状态显示Pending Contract
  11. spring 定时器_细数那些使用过的定时器
  12. 【论文阅读】DNS隧道攻击检测算法整合
  13. 网络文化经营许可证和icp许可证的区别
  14. ug998逻辑思维导图
  15. word给代码加行号
  16. C++调用PHP程序
  17. 针对网络层的DoS攻击
  18. 使用NFC tool工具将加密门禁卡写入小米手环步骤详解
  19. vue设置页面title
  20. css 手抓,CSS 像素画 - 手和箭头

热门文章

  1. 怎样查找计算机死机日志,查看windows7系统日志找到电脑死机卡机的原因
  2. The Forty-Year Programmer
  3. Discoverer:查询报表被user和Responsibility直接拥有
  4. 小型防雨箱式柴油发电机
  5. com.esri.android,Error inflating class com.esri.android.map.MapView
  6. sh install.sh失效
  7. LeetCode 91. 解码方法 Java/Python
  8. rime中州韵输入法源码初识----分工与安装
  9. latex合理使用循环和判断选择语句进行绘图的例子
  10. docker_容器间的链接 link