#嵌入式# #STM32HAL库# #CubeMX#
嵌入式-STM32-CubeMX系列教程–首篇
1.自述
? 首先简单介绍下我自己,目前大四在某公司从事嵌入式STM32单片机的开发实习工作,最终目 标是想转到Linux驱动方向,下一步准备往Linux应用方向学习,有从事相关行业的大佬或者学这 个专业的大佬求分享下学习计划啥的,感谢。 ?
嗯,同时我也是稚晖君的忠实粉丝,大三期间复刻过稚晖君的HoloCubic开源项,感谢大佬的开源引领兴趣激发。
2.介绍
? 言归正传,本教程作为自己学过的知识的一个归纳总结,CSDN上有大佬写的一部分非常详细, 我这里会有重复造车轮一部分,也会有一些其他功能的补充。 ? 唉,为了文档完整性不得已重复造车轮,求谅解。
—关于大佬的CSDN链接CSDN_Z小旋(在此十分感激大佬)
(https://blog.csdn.net/as480133937/article/details/99935090?spm=1001.2014.3001.5502)
3.安装教程
? 工欲善其事,必先利其器,这个环节呢,给大家提供出CubeMX的安装链接,和我常用的开发环境用的软件。
CubeMX下载地址 https://www.st.com/zh/development-tools/stm32cubemx.html#get-software (注意哈,下载需要注册账号,是免费的,但是会给你发邮件,从邮件里戳进去才能下,比较麻烦。) 安装部分就正常安装就行
官网选择MDK-arm直接下即可,激活需要参考下方链接激活教程,如有侵权,我会删除该文档 Keil下载地址 https://www.keil.com/download/product/ 激活工具 链接:https://pan.baidu.com/s/1PkqEtZxsKGGknbmb1PH_WA 提取码:jolm 安装部分参见CSDN_Keil安装教程 在此不过多赘述。
官网直接下载安装即可 VScode下载链接 这一部分,额,关于单片机开发,我比较喜欢在VScode环境下编程,毕竟VScode插件的代码补全 香的不要不要的,这里给大家推荐一下。
VScode需要用到MingGW
链接:https://pan.baidu.com/s/1LVnk5OA9V5IeapyEKre28g 提取码:xped
安装插件 1.C/C++ 2.Chinexe 3.Keil Assistant 4.Tabnine AI Autocomplete for Javascript, Python, Typescript, PHP, Go, Java, Ruby & more
配置Keil Assistant 选择复制扩展ID
找到Keil的快捷方式,右键选择打开文件夹所在位置,把路径复制过来。后边加上如上图所示\UV4.exe
配置MingGW 解压我分享的压缩包,解压完后里边的压缩包先不用管,打开MingGw安装软件参考以下链接安装 MingGW安装教程 如果没有安装成功,请打开我分享的文件中README文件 将文件中的压缩包解压,按照README提示操作即可。
4.CubeMX基础教程
? 呼~终于到了CubeMX教程了哈!!!
我自己口头简介的哈,一种勾选式的stm32代码生成工具,有过stm32开发经验的都知道,以前要配置 个东西搞一个项目模板出来就费老半天劲。于是就有了CubeMX,嗯,又是真香定律,大大简化了开发流、 程和开发难度。
- 4.2CubeMX基本使用
点亮LED灯和简单的USART串口通信(后续我会继续出关于USART的详讲,今天主要让大家了解CubeMX为主)
打开CubeMX软件
新建工程
找到你手头有的STM32单片机,输入型号,根据上图提示操作。
一定要记得首先配置SYS文件,这是调试下载程序口
如果你用到的是外部晶振,要使能HSE LSE是RTC时钟晶振
配置USART串口,今天不作详细讲解USART,后续会有独立一篇介绍 先按照图片提示操作
时钟树,怎么样!够直观吧!CubeMX真香系列,此处真的希望国产芯片外围开发环境能发展快些,加油!
gpio配置,注意gpio配置直接在芯片模型处右键,勾选output
这块按照图片提示操作就好,注意路径不要有中文 然后开发平台版本选对,若果你是高版本是可以兼容低版本的
配置完了,点击GENERATE CODE生成项目模板就好了
打开VScode 添加项目工程,直接打开项目工程文件,然后修改如图红框勾选图片。(注意下,这里是我毕设的一个空工程文件模板,因为之前的是在公司编辑的没考过来,有个类似的空模板,这儿就没新建新的CubeMX工程,这是后拷贝到一个有中文的路径下的,再次打开CubeMX工程文件时,生成文件会报错,备份记录可以,不建议在中文路径下开发。)
附上工程文件路径,供参考下吧
图片中代码
/* USER CODE BEGIN 2 */
uint8_t ch[] = "Hello world";
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
HAL_UART_Transmit(&huart1, (uint8_t *)ch, 11, 0x1000);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
HAL_UART_Transmit(&huart1, (uint8_t *)ch, 11, 0x1000);
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}
完结 更新速度较慢,可以参考以上大佬CSDN_Z小旋
|