STM32复习笔记(一):软件配置工程创建

目录

Preface:

Hardware-Configuration & Software-Environment:

(一)新建项目工程

(二)工程配置

(三)配置外设

(四)项目管理

(五)Clion相关配置


Preface:

        呃,首先说点题外话。记得第一次听说stm32这个东西的时候还是在2021年12月左右,当时刚刚自学完了51单片机,参加了个小比赛。然后一个偶然的机会,拿(白嫖)到了一块stm32f4的最小系统板,然后对着某原子的“stm32f4单片机新建工程模板.pdf”捣鼓了一个下午,终于点亮了一颗LED。。后来想去b站找教程,我记得有个up讲51讲得很好(好像叫什么江科大?),但是当时他的stm32版本才只有几集。。。没办法,只能去看某原子的视频教程了,但是那视频质量我只能说懂得都得,然后我又摸了2个月🐟,直到2022年1月又重新从头开始学。但是对当时的我来说,f4实在是太难了,所以就去学了f1,后面也是磕磕绊绊,学习了许许多多的东西。。。一开始还是学的标准库,毕竟那时候网上大多数教程都是用的标准库吧,标准库稳定是稳定,但是代码初始化的过程实在是有一丢丢复杂,我记得当时初始化外设的时候经常漏步骤。

        然后就大概学了半年的标准库,就接触到了HAL库,就是用cubemx来生成代码,初始化的步骤直接变成了图形化界面,瞬间觉得舒服多了,直到现在也是一直在用cubemx,标准库已经在我的工程中消失了hhh(但是还是能用滴,比如说别人的工程用的是标准库,那就只能跟着来用,或者花多点时间移植到HAL库。。)

        写代码的话,老牌的Keil当然是大家入门首选,据说全球有一半以上的MCU都用Keil来开发,可见它有多牛b了,它的调试功能打爆一切对手(个人看法),而Keil作为一个上世纪的产物,虽然现在也在逐步更新,但是它的代码编辑功能真的是一言难尽。刚开始学的时候还是用的Keil,后面就上了vscode的keil-assistant插件+Keil配合使用,vscode负责编辑,keil负责调试,非常好用,谁用谁知道~~~再后来也用过了stm32cubeide,但是个人感觉跟vscode差别不是很大。再后来(直到现在),用的是大佬们用过的CLion+stm32cubemx,用cubemx生成代码,用clion编制+调试,而且clion代码提示能力真的是非常给力,虽然说调试功能可能比不太上keil(maybe),但是个人感觉这点牺牲是值得的。。。当然这个复习笔记里面不会说到环境、工具链配置,网上很多大佬都有写。。。

        最重要的是,从来没有做过一个复习计划,突然就心血来潮想做一个,毕竟后面可能没有这么空闲的时间来整体复习一下stm32了(当然复习笔记只是写给自己看的,以后要是忘了还能回来看~)ok废话不多说,直接开冲


Hardware-Configuration & Software-Environment:

普中-天马F407开发板(主控芯片:STM32F407ZGT6),STLink-V2调试器

STM32CUBEMX版本:v6.9.1

STM32F4 HAL库版本:1.27.1

CLion版本:2023.2

编译器:gcc-arm-none-eabi-10.3-2021.10-win32、MinGW 64

调试器:OpenOCD-20230621-0.12.0


(一)新建项目工程

首先打开clion,找到embedded并选cubemx,然后选择文件路径,最后新建工程:

新建成功之后会弹出下图界面让你选板子配置文件(主要是配置下载、调试的),这里先不选,后面再慢慢选 :

然后,等右下角进度条跑完,在当前页面打开cubemx(没有设置配置文件的话,默认是帮你选好stm32f030f4p6,这个可以进到cubemx里面改):

打开cubemx后,点左上角的stm32f030f4p6,进去修改芯片,选择stm32f407zgt6即可:

对于左边这一列,从上到下依次为:系统内核、模拟、定时器、通信接口、多媒体接口、安全、计算、中间件和软件包;系统内核里面有:DMA(直接存储器存取)、GPIO(通用IO)、IWDG(独立看门狗)、NVIC(嵌套向量中断控制)、RCC(复位和时钟控制)、SYS(系统配置)、WWDG(窗口看门狗);模拟里面有:ADC(模数转换)、DAC(数模转换);定时器里面有:RTC(实时时钟)、TIM1~14(定时器,其中TIM1和TIM8是高级定时器,TIM6和TIM7是基础定时器,其余都是通用定时器);通信接口里面有:CAN(can总线)、ETH(以太网)、FSMC(可变静态存储控制器)、I2C(iic总线)、SDIO(sd卡用)、SPI(串行外设总线)、UART(通用异步串口)、USART(通用同步异步串口)、USB_OTG_FS & USB_OTG_HS(USB总线相关);多媒体接口里面有:DCMI(数字摄像头接口)、I2S(音频接口);安全里面有:RNG(随机数生成器);计算里面有:CRC(循环冗余校验);中间件和软件包里面东西非常非常多,这里只说一些我用过的(没用过也不懂,,,):FATFS(文件分配表类型的文件系统FAT-FS)、FREERTOS(开源、免费的实时操作系统freertos)、X-CUBE-AL(stm32的ai部署软件,对模型数据进行剪枝、压缩,实现边缘计算)、X-CUBE-TOUCHGFX(stm32的GUI设计软件,用来设计图形界面)。


(二)工程配置

一打开cubemx,直奔system core中的SYS,配置调试接口,用来进行代码烧录下载、调试。Debug选择Serial Wire即可;System Wake-up是睡眠的时候唤醒所需要设置的,这里用不到就不用管;Timebase Sorece时基源默认选择SysTick系统滴答计时器即可,用以给HAL库提供标准时基,一般都不用管它,只有在使用操作系统的时候,操作系统默认使用SysTick,那么就要把此处的Timebase Sorece修改为任意一个计时器,因为HAL库的时基与操作系统的时基不同。。。不使用操作系统的时候直接就默认即可。

下一步,打开RCC,给系统配置晶振,HSE(外部高速时钟),LSE(外部低速时钟),Master Clock Out 1 & 2(主时钟输出,也就是单片机通过特定引脚输出时钟给外部)、I2S_CKIN(音频时钟输入,可以输入准确的时钟给I2S,也就是音频协议,能得到更高品质的音频)。HSE和LSE一般选Crystal/Ceramic Resonator(无源石英/陶瓷晶振)即可,HSE是给整个系统提供时钟的,而LSE只给RTC提供时钟(没用到RTC的话就不需要开启),一般HSE取4~25MHz,而LSE取32.768kHz,经过分频后得到准确得1Hz提供给RTC时钟;参数configuration保持默认即可:

下一步,进入时钟配置,主要配置时钟参数,如系统时钟,总线时钟等等;在HSE处根据实际情况输入晶振大小,我板子上的是8M,则输入8,然后HCLK输入168,直接最大频率(如果没有特别需求,比如说某个外设一定要多少频率,或者是要跑低功耗之类的特殊用途,一般系统时钟HCLK设置为最大就行),然后敲两下回车,再回去选择HSE,但是此时发现HCLK变了,那再改回168并回车即可设置成功。


(三)配置外设

 第一个外设毫无疑问就是点灯啦!根据开发板原理图,

就能知道LED0和LED1分别连接在PF9和PF10引脚上,并且为低电平点亮;回到cubemx,因为芯片引脚比较多,所以使用搜索功能(右下角)搜索PF9(可以发现PF9一直在闪烁):

找到PF9后,左键单击点开,选择GPIO_OUTPUT输出功能,再右键单击,选择Enter User Label(输入用户标签),可以给引脚自定义名字,这里设置为LED0;PF10做相同的操作,并设置为LED1:

然后在左边System Core中找到GPIO,选择PF9(PF10一样),进行GPIO参数配置如下:

GPIO output level:GPIO输出电平,因为LED低电平点亮,所以先输出高让它灭,在需要时再点亮;GPIO mode:GPIO模式,选择推挽输出,增强驱动电流能力;GPIO Poll-up-Pull-down:GPIO上下拉,选择上拉,也就是空闲时候默认高电平;Maximum output speed:最大输出速度,速度越快,功耗越大,点灯这种不需要高速的操作就选low可以了。


(四)项目管理

进入Project Manger,首先,用Clion生成的项目保存的时候必须与Clion同名并且在同一个目录下才能被找到,IDE选STM32CubeIDE,堆、栈大小保持默认即可:

然后,文件生成勾选如图所示,生成每个外设对应的.c和.h文件,方便项目管理:

最后点击右上角生成代码,弹出提示框,选择yes同意覆盖,等待代码生成成功后,点close即可:

(五)Clion相关配置


 接下来进入clion中,依然选择跳过配置文件,稍后自己配置:

等待右下角进度条跑完,进入编辑界面:

接下来,配置编译器、调试器工具链(具体如何下载安装就不说了,主要是篇幅太长了,下载安装的话网上有许多教程可以去找); 左上角File->Setting->Toolchains,新建一个MinGW编译选项,Toolset选择MinGW,C Compiler(C编译器)选择arm-none-eabi-gcc.exe,C++ Compiler(C++编译器)选择arm-none-eabi-g++.exe,点击应用即可:

然后配置CMake(构建、编译、链接工具),工具链选择刚刚配置好的MinGW,名字任取,如下图:

最后,配置OpenOCD调试工具,点击下图中的配置,进入配置界面,点击左上角+号,往下找到OpenOCD并选择,然后需要选择板子的配置文件(这就是前面一直说的配置文件),再选择可执行的二进制文件,最后点击Apply+OK即可:

配置文件内容如下:

# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swd
source [find interface/stlink.cfg]
transport select hla_swd
source [find target/stm32f4x.cfg]
# download speed = 10MHz
adapter speed 10000

 然后点击右上角编译,等待编译成功:

然后输入点灯函数(tips:代码必须写在沙箱注释中,否则下次用cubemx生成代码的时候会被覆盖掉),编译:

最后点击下载,下载成功!可以看到板子上的灯如预期所亮:

还有调试功能也是杠杠的:

调试过程看外设寄存器的值,导入D:\Keil\Keil\STM32F4xx_DFP\2.17.0\CMSIS\SVD\STM32F407.svd文件(因为相关的配置信息在keil中已有,所以直接load进来即可):


工程链接:https://pan.baidu.com/s/1RTHqNqyEWAeSOndfi1BtNQ 
提取码:0xFF

以上均为个人学习心得,如有错误,请不吝赐教~

THE END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区别对比表:阿里云轻量服务器和云服务器ECS对照表

阿里云轻量应用服务器和云服务器ECS区别对照表,一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比,阿里云服务器网分享ECS和轻量应用服务器区别对照表: 目录 轻量应用服务器和云服务器ECS区别对照表 轻…

51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真+程序+原理图+报告+讲解视频)

51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显示( proteus仿真程序原理图报告讲解视频) 讲解视频1.主要功能:2.仿真3. 程序代码4.原理图5. 设计报告6. 设计资料内容清单 51单片机音乐闹钟秒表倒计时整点报时多功能电子钟万年历数码管显…

MySQL视图、用户管理

目录 视图概念和操作 视图基本操作 视图规则和限制 用户管理 用户 视图概念和操作 什么是视图? 视图是一个虚拟表,由一个或多个基本表的查询结果组成(视图是存储在数据库中的查询的SQL 语句,不在数据库中以存储的数据值集形式…

Verilator: sh: 1: exec: < PATHNAME >: not found

事出有因 I assumed that I install verilator via git clone its source, so I need to set the export VERILATOR_ROOT. At first, due to laziness, I just copy the code directly to my ubuntu. so stupid I am!!! Then, I recoginzed that the pathname is not real, …

wireshark of tshark tools v3.4.0版本 支持json

tshark(1) Install tshark (Wireshark) Ver.3.4.0 on CentOS7 --It must be "ps", "text", "pdml", "psml" or "fields". TCP 协议中的三次握手和四次挥手是 TCP 连接建立和关闭的过程。 三次握手 客户端向服务器发送 SYN…

JMeter学习第一、二、三天

首先,我们来了解一下到底什么是接口测试与性能测试: 接口测试 定义 接口测试主要关注系统组件之间的交互,确保各个接口按预期工作。这包括验证传递的数据、数据格式、调用的频率和其他与接口调用相关的任何限制。 目的 确保系统的各个组件可…

mac清理垃圾的软件有哪些?这三款我最推荐

没错,Mac电脑真的好用,但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性,系统的缓存垃圾常常隐藏得让人发现不了。不过,别担心!有一些专业的Mac清理软件可以帮你解决这一系列问题,让清理垃圾变得轻松…

10链表-单链表构造LinkedList

目录 LeetCode之路——707. 设计链表 分析: Code: LeetCode之路——707. 设计链表 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,n…

什么是TF-A项目的长期支持?

安全之安全(security)博客目录导读 问题:Trusted Firmware-A社区每六个月发布一次代码。然而,对于生产中的平台,该策略在维护、重要软件修复的向后兼容性、获得最新的安全缓解措施和整体产品生命周期管理方面不具备可扩展性。 开源软件项目&…

【C++设计模式之原型模式:创建型】分析及示例

简介 原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制已有对象来生成新的对象,而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象,而无需显式地调用构造函数或暴露对象的创建…

LDGRB-01 用于在边缘处理人工智能的嵌入式硬件

LDGRB-01 用于在边缘处理人工智能的嵌入式硬件商业和企业中的IT系统正在全面快速发展,一个不断增长的趋势正在将计算能力推向边缘。Gartner预测,到2025年,边缘计算将处理75%的数据由所有用例产生,包括工厂、医疗保健和运输中的用…

[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除git 通过githack 获取index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i, $_GET[exp])) {if(; preg_replace(/[a-z,_]\(…

Vue中如何进行响应式图像与图片懒加载优化

Vue中响应式图像与图片懒加载优化 在现代的Web开发中&#xff0c;图像在网站性能和用户体验方面扮演着至关重要的角色。然而&#xff0c;加载大量的图像可能会导致网页加载速度变慢&#xff0c;从而影响用户的满意度。为了解决这个问题&#xff0c;Vue.js提供了一些强大的工具…

【gitlab】git push -u origin master 报403

问题描述 gitlab版本&#xff1a;14.0.5 虚拟机版本&#xff1a;centos7 项目&#xff1a;renren-fast 原因分析 .git -> config目录下 url配错 但这个url不是手动配置的&#xff0c;还不知道怎么生成。 解决方法 把配置错误的url改成gitlab的project的url 这样&#…

Android学习之路(20) 进程间通信

IPC IPC为 (Inter-Process Communication) 缩写&#xff0c;称为进程间通信或跨进程通信&#xff0c;指两个进程间进行数据交换的过程。安卓中主要采用 Binder 进行进程间通信&#xff0c;当然也支持其他 IPC 方式&#xff0c;如&#xff1a;管道&#xff0c;Socket&#xff0…

VS Code更改软件的语言

刚刚安装好的 vscode 默认是英文&#xff0c;可以安装中文扩展包。如图&#xff1a; 重启即可更换为中文。 如果想切换为英文&#xff0c;可以 Ctrl Shift P&#xff0c;打开命令面板。 输入 Configure DIsplay Language&#xff0c;如图&#xff1a; 可以在中英文之间切换…

10.04

QT实现TCP服务器客户端搭建的代码&#xff0c;现象 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket> #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : p…

网络安全面试题汇总(附答案)

作为从业多年的网络安全工程师&#xff0c;我深知在面试过程中面试官所关注的重点及考察的技能点。网络安全作为当前信息技术领域中非常重要的一部分&#xff0c;对于每一个从事网络安全工作的人员来说&#xff0c;不仅需要掌握一定的技术能力&#xff0c;更需要具备全面的综合…

数据结构P46(2-1~2-4)

2-1编写算法查找顺序表中值最小的结点&#xff0c;并删除该结点 #include <stdio.h> #include <stdlib.h> typedef int DataType; struct List {int Max;//最大元素 int n;//实际元素个数 DataType *elem;//首地址 }; typedef struct List*SeqList;//顺序表类型定…

Spring 作用域解析器AnnotationScopeMetadataResolver

博主介绍&#xff1a;✌全网粉丝近5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经…