当前位置: 首页 > news >正文

第5章—STM32工程创建

开发板:YS-F1PRO

处理器型号:stm32f103zet6

keil版本:5.38.0.0

CubeMX版本:6.3.0


STM32的编程方法

STM32CubeMX创建STM32工程

1.工程初步建立

 方法一:依次点击“File->New Project”即可建新工程。如果之前打开过的话,左侧最近打开的过程一列会有打开的工程列表,直接点击这些工程也可以打开。
 方法二:直接点击 ACCESS TO MCU SELECTOR。具体操作如图所示。

  点击新建工程后,可能会弹出如图的窗口,提示需要联网下载一些文件,可能等待时间比较长,可以直接选择取消即可。我们可以通过关闭自动更新设置来禁止弹出这个窗口。

之后都可以进入芯片选型界面,如图所示。

选择具体的芯片型号,如图所示。

鼠标双击选择的芯片型号后,弹出主设计界面,如图所示。

芯片的电源引脚均为浅黄色表示

2.GPIO引脚配置

目的是要点亮板子上的三个LED灯,原理图如图所示

使用 STM32CubeMX 工具配置 STM32F1 的 GPIO 口。这里我们回到 STM32CubeMX 的 Pinout&Configuration 选项,在搜索栏输入 PB0 后回车,可以在引脚图中显示位置,如下图所示:

接下来,我们在下图引脚图中点击 PB5,在弹出的下拉菜单中,选择 IO 口的功能为 GPIO_Output。操作方法如下图所示:

        同样的方法,我们配置 PG6、PG7选择功能为 GPIO_Oput 即可。设置好即可看到引脚从灰色变成绿色,标识该管脚已经启用。这里我们需要说明一下,如果我们要配置 IO 口为外部中断引脚或者其他复用功能,我们选择相应的选项即可。配置完 IO 口功能之后,还要配置 IO 口的速度,上下拉等参数。这些参数我们通过 System Core 下的 GPIO 选项进行配置,如图所示

点击想配置的引脚,然后在下方的框里配置即可

User Label 用户符号,我们可以给 PB50起一个别的名字 LED1。

        在配置时会出现感叹号是因为ADC用到的引脚设置成了其他模式,与ADC功能时的引脚模式不对应。

3.HSE和LSE时钟源设置

设置时钟源 HSE 和 LSE。如图所示。

        标号④和⑤,我们都选择了 Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。开发板的外部高速晶振和外部低速晶振分别是:8MHZ 和 32.768KHZ,所以 HSE 时钟频率就是 8MHZ,LSE 时钟频率就是 32.768KHZ。

        选项 Master Clock Output 1 用来选择是否使能 MCO1 (PA8)引脚时钟输出

4.时钟树配置

        点击 Clock Configuration 选项卡即可进入时钟系统配置栏

        进入 Clock Configuration 配置栏之后可以看到,界面展现一个完整的 STM32F1 时钟系统框图。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。

        配置一个以 HSE(外部高速时钟,HSI为内部高速时钟,也为8M,但用的很少,因为不稳定) 为时钟源,配置 PLL (锁相环/倍频器)相关参数,然后系统时钟选择 PLLCLK为时钟源,最终配置系统时钟为 72MHz 

把系统时钟配置分为七个步骤,分别用标号 1~5 表示,详细过程为:
  ① 时钟源参数设置:我们选择 HSE 为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是 8MHZ)填写。
  ② 时钟源选择:我们配置选择器选择 HSE 即可。
  ③ PLL 倍频系数 PLLMUL 配置。倍频系数 PLLMUL 我们设置为 9。
  ④ 系统时钟时钟源选择:PLL,HSI 还是 HSE。我们选择 PLL,选择器选择 PLLCLK 即可。
  ⑤ 经过上面配置以后此时 SYSCLK=72MHz。
经过上面的 5 个步骤,就配置好 STM32F1 的系统时钟为 72MHz。接下来我们还需要配置AHB、APB1、APB2 和 Systick 的分频系数,为 STM32 的片上外设或 M3 内核设置对应的工作时钟,为后续使用这些硬件功能做好准备。配置如下图所示:

        AHB、APB1 和 APB2 总线时钟以及 Systick 时钟的来源于系统时钟 SYSCLK。其中 AHB总线时钟 HCLK 由 SYSCLK 经过 AHB 预分频器之后得到,如果我们要设置 HCLK 为 72MHz(最大为 72Mhz),那么我们只需要配置图中标号⑥的地方为 1 即可。得到 HCLK 之后,接下来我们将在图标号⑦~⑨处同样的方法依次配置 Systick、APB1 和 APB 分频系数分别为 1、2 和 1。
  注意!systick固定为72MHz,配置完成之后,那么HCLK=72MHZ,Systic=72MHz,PCLK1=36MHz,PCLK2=72MHz,这和之前例程配置的时钟是主频一样的。
        以上方法是手动计算的方法,是为了帮助我们更好地去认识 STM32 时钟的配置方法,当然CubeMX 也提供了更简单的方法:在上图的“HCLK(MHz)”位置,实际上是可以编辑的。我们直接输入我们要的主频,这里是 72Mzh,按回车键,CubeMX 会帮我们提供一种设置主频和其它时钟的建议,选择是后会由软件自动配置好,当然只有启用外部的晶振后才能配置到72Mhz 的时钟。

        在第3步配置时钟源时,如果使能了Master Clock Output,则可以配置此处,选择输出的时钟的类型

5.配置Debug选项

        由于 CubeMX 默认把 Debug 选项关闭了,这样会给我们带来麻烦:用 CubeMX 生成的工程编译下载一次后,后续再次下载就会提示错误,因此我们要把 Debug 选项打开。这里有多种选择,我们设置成图所示的情况即可。

        如果已经不小心关闭了 Debug 选项,那么下次下载的时候按住复位键,等到工程提示的时候松开复位键即可,因为 STM32 的芯片默认复位上电时的 Debug 引脚功能是开启的。

6.生成工程源码

选择 Project Manager-> Project选项用来配置工程的选项,我们了解一下里面的信息。
  Project Name:工程名称,填入工程名称(半角,不能有中文字符)
  Project Location:工程保存路径,点击 Browse 选择保存的位置(半角,不能有中文字符)
  Toolchain Folder Location:工具链文件夹位置,默认即可。
  Application Structure:应用的结构,选择 Basic(基础),不勾选 Do not generate the main(),因为我们要其生成 main 函数。
  Toolchain/IDE:工具链/集成开发环境,我们使用 Keil,因此选择 MDK-ARM,Min Version 选择 V5.27,这里根据 CubeMX 的版本可能会有差异,我们默认使用 V5 以上的版本即可。
  Linker Settings 链接器设置:
  Minimum Heap Size 最小堆大小,默认(大工程需按需调整)。
  Minimum Stack Size 最小栈大小,默认(大工程需按需调整)。
  MCU and Firmware Package 是 MCU 及固件包设置:
  MCU Reference:目标 MCU 系列名称。
  Firmware Package Name and Version:固件包名称及版本。
  勾选 Use Default Firmware Location,文本框里面的路径就是固件包的存储地址,我们使用默认地址即可。(这里因为我有两个版本的固件包,所以它默认使用最新的,这个关系不大,就用新的)。这样工程生成的设置就设置好了,如图所示。

Advanced和Basic创建的工程文件的区别如下:

        打开 Project Manager-> Code Generator 选项,Generated files 生成文件选项,勾选 Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾选这个选项的话将会将每个外设单独分开成一组.c、.h 文件,使得代码结构更加的清晰,如图所示

        由于 CubeMX 默认勾选了复制所有的库,即工程中不使用到的代码也会复制进来,为了节省 CubeMX 生成工程的空间,我们勾选生成工程时只复制用到的库(这一步是可选操作,大家根据自己的实际选择),如图所示:


保存工程并生成工程

工程架构如下:

Drivers 文件夹存放的是 HAL 库文件和 CMSIS 相关文件。
Inc 文件夹存放的是工程必须的部分头文件。
MDK-ARM 下面存放的是 MDK 工程文件。
Src 文件夹下面存放的是工程必须的部分源文件。
Template.ioc 是 STM32CubeMX 工程文件,双击该文件就会在 STM32CubeMX 中打开

7.编译

        在编写用户程序之前,首先我们打开生成的工程模板进行编译,如果配置的 CubeMX 的工程名和路径名不含中文或中文字符,按上述步骤生成的工程就可以直接编译通过了。

        注意:STM32CubeMX 生成的 main.c 文件中,有很多地方有“/* USER CODE BEGIN X /”和“/ USER CODE END X */”格式的注释,我们在这些注释的 BEGIN 和 END之间编写代码,那么重新生成工程之后,这些代码会保留而不会被覆盖。

8.添加用户程序

生成的代码编译通过后,可编写用户自己的逻辑程序,最后再编译、下载验证

http://www.dtcms.com/a/512591.html

相关文章:

  • 网站建设公司宣传标语用百度地图 做gis网站
  • c 还可以做网站微信推广是什么意思
  • 代码随想录 112.路径总和
  • 51单片机基础-定时器中断
  • xtuoj 两个数
  • Android Studio新手开发第二十六天
  • 中国平安网站建设成都网站建设易维达好
  • 继保:对于线路两侧的电流互感器型号系数选取
  • Redis分布式集群:从分区算法到扩容实战
  • AI大模型:(二)1.6 DeepSeek-OCR部署尝鲜
  • 在昇腾NPU上跑Llama大模型:从零开始的真实测试之旅
  • 直播类网站开发wordpress 图片自动分页
  • JADX下载和安装图解教程(附安装包)
  • 矽塔 SA8203 2.5A可调过流保护 输入耐压36V 过压/过流保护芯片
  • 网站开发饼图样式wordpress 如何登陆地址
  • 工业相机 “即插即用” vs 采集卡依赖
  • wordpress手机视频播放器免费seo营销软件
  • 【系统分析师】预测试卷一:论文及写作要点(包括对应素材和论文案例)
  • 私有云不私有?Nextcloud+cpolar让文件随身走
  • 诺基亚官方网站wordpress站点进入时弹窗
  • 网站建设运营合作合同外链代发工具
  • 重庆江北网站建设18款app软件免费下载百度
  • wordpress 多语言 站点动态ip做网站影响seo吗
  • 河南建设网站官网怎么用微信官方网站做二维码
  • JSTS ,JSXTSX的区别与联系(前端react第一篇)
  • 电子商务网站建设以什么为核心公司网站能自己做吗
  • 股指期货与股票的区别是什么?
  • 天津网站建设学习温州建站模板搭建
  • 兰州网站优化服务个性化网站建设费用
  • Nginx负载均衡:高性能流量调度指南