IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32入门指南—新建第一个工程 -> 正文阅读

[嵌入式]STM32入门指南—新建第一个工程

STM32入门指南—新建第一个工程

STM32CubeMX配置

打开软件,通过 File->New Projet... 来新建一个工程。

CubeMX每次使用时都会联网更新一些东西,包括芯片库,板卡库和例程库之类的,若是觉得费时可以直接cancel。

1

选择芯片

接下来选择你的芯片。你也可以选择一个官方的开发板,或者打开一个例程来开始你项目。

这里我选择比较大众的芯片 STM32F103ZET6 ,然后点击右上角的 Start Project

2

配置 IO 和其他功能

这里是使用 CubeMX 比较重要的一个环节了,来为你的项目配置IO和其他的一些功能。

左边是根据功能和系统层级来将所有的功能都分类了

在 System Core 中,包括(按字母排序)

  • DMA
  • GPIO
  • IWDG
  • NVIC
  • RCC
  • SYS
  • WWDG

每个目录下都有不同的功能可以配置,这个我们按需要了解。

右侧展示芯片的封装及IO配置,所有IO配置都可以直接芯片引脚上左键选择。

3

SYS 里面有三个可以配置的内容,包括:

  • 调试接口(如果不配置调试接口,之后下载程序将会失败,需要把BOOT0 拉高才能正常下载 )
  • 系统唤醒功能 (系统进入低功耗模式,可以通过拉高 PA0 引脚来唤醒 MCU )
  • 基本时钟源选择(系统基本延时所使用的定时器,保持默认即可)

如果你使用的调试器为ST-Link,需要把调试接口选择为SW(Serial Wire)。
4

5

SYS 里面也有三个可以配置的内容,包括:

  • HSE(High Speed External,高速外部时钟)
  • LSE(Low Speed External,高速外部时钟)
  • MCO 主时钟输出

如果你的板子上有外部的晶体的话,请使能他们。

BYPASS Clock Source 旁路时钟源,时钟信号直接从 RCC_OSC_IN 引脚输入

Crystal/Ceramic Resonator 石英/陶瓷晶振,时钟信号通过外部晶体产生

6

在 Connectivity 里面我们配置一下串口,用来输出一串字符 “Hello World\r\n”。

选中USART1,模式选择为异步方式,不使能硬件流控。其他参数保持默认(波特率默认115200,8个数据位8,无校验位,1个停止位),也不用配置中断的DMA。

PinMap上自动标出了USART1两个IO的位置。

7

配置时钟

在时钟配置中,非常详细直观的展示了MCU的时钟树结构,将手册上难以琢磨的参数配置形象化。其中高亮的部分就是我们能够修改的地方。

首先是外部时钟频率的设置,包括高速的和低速的。

一般MCU都会有外部的高速晶体,相比于内部的RC振荡器,外部的晶体频率更加准确。根据实际情况填写频率(只有在 RCC 使能外部时钟信号才可以)。

外部低速晶体也是同样如此,只不过低速时钟只用在看门狗和RTC上,很多板子为了节约成本,便是用了内置的低速时钟源。

8

主系统时钟有三个来源:

  • HSI(内部高速时钟)
  • HSE(外部高速时钟)
  • PLL(HSI 或者 HSE 的倍频)

建议将外部时钟的PLL倍频作为主系统时钟的来源(如图所示),所得频率更佳精准,动态范围也更大。

CSS 是时钟安全机制,当外部时钟出现故障时,如果 CSS 使能,将会产生一个不可屏蔽中断,同时选择内部的时钟作为主系统时钟。

上图右侧也详细展示了各个外设的时钟频率。

配置工程属性

在这个页面主要是配置 CubeMX 生成的工程的一些属性(所有推荐的设置都如图所示)。

从上往下以此为:

  • 工程名
  • 工程的位置
  • 工程的应用结构(无需在意)
  • 生成的IDE项目的文件夹位置
  • 选择IDE和最小版本
  • 堆和栈的大小
  • ...

其他的暂时不关注。

9

这一页有一些生成代码的选项,翻译为:

  • STM32Cube MCU包和嵌入式软件包
    • 复制所有用到的库到项目文件夹
    • 复制仅必须的库文件(推荐,包含了必须的文件,体积较小)
    • 在工具链项目文件夹的配置文件中,添加库文件的引用
  • 生成文件
    • 为每个外设的初始化都添加一对“.c/.h”文件
    • 重新生成时,备份先前的文件
    • 重新生成时,保留用户代码
    • 没有重新生成时,删除先前的已经生成的文件
  • HAL 库的设置
    • 设置所有没有使用的引脚作为模拟口(为了优化功耗
    • 启动断言(HAL的函数会对参数进行检查)
  • 模板设置(以后再介绍)

10

这一页有一些更高级的设置,一般情况下跳过就好了,这里只简单地介绍一下:

上面是驱动库的选择,众所周知,HAL是比较高层次的封装,执行起来效率比较低,堆栈占用比较大,生成代码的速度和体积都比较大。所有就有了另一个选项 LL 库,LL 库更像是标准库,大多操作是基于寄存器的,在对速度有要求的场合下,还是得用 LL 库。这里程序功能比较简单,我们选择 HAL 库。

下面是外设初始化函数有关的,包括初始化的顺序,外设实例的名字,是否不生成函数调用。

右侧是和回调函数有关的,程序完成某一项任务(初始化失败,中断…),会调用相应的回调函数,这些函数有两种形式。一种(Disable)是系统已经定义好的 __weak 类型的函数,用户自己在重新声明便可以使用。另一种(Enable)自己编写函数,初始化时通过函数指针链接上。

在这里插入图片描述

生成代码

最后点击 CubeMX 右上角的 GENERATE CODE,生成代码。

12

MDK编辑

编写代码

打开刚刚生成的工程,可以看到如下所示的目录结构

依次为

  • 启动汇编文件
  • 用户应用的主要文件
    • main
    • 各种外设
    • 中断函数文件
  • HAL 库文件
  • CMSIS 的头文件

在程序的 main 函数里添加

HAL_UART_Transmit(&huart1,(uint8_t*)"Hello World\r\n",13,1000);

这里调用 HAL 库的串口发送函数,轮询的方式发送字符,并设置了超时时间 1000 ms。

注意这里代码一定要放在注释指明的 BEGIN 和 END之间,否则下次生成代码,在这之外的内容全部消失,推荐新建自己的目录和 .c 和 .h文件,避免在 main.c 添加大量自己的代码,防止重新生成时一无所有。

13

编译、调试和下载

接下来就是编辑,调试和下载了,Debug 的功力需要各位日积月累。

14

实际验证

打开串口助手,可以看到结果如图所示。

有一些板子把串口芯片(CH340)的流控位(CTS,RTS)设计成芯片的BOOT0和复位信号,所以在打开关闭串口时就有复位的效果,串口下载也是同样的道理,调试的时候,有这些功能会更加方便一些。

再推荐如下图所示的串口调试助手(当然作者不是我),可以在 Window Store 搜索到,除了绘图部分需要收费以外,其他功能都是免费的,细节也都挺好的。

15

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:23:46  更:2021-08-09 10:24:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 1:10:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计