STM32F103笔记(一)[通俗易懂]

STM32F103笔记(一)[通俗易懂]STM32的概述STM32的简述stm32系列的命名规律STM32F1系列芯片介绍关于查找资料-如果查找IO口是否独立,可查看《精英版IO引脚分配表》如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLo…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一. STM32的概述

stm32F1系列是来自ARM公司具有突破性的以ARM Cortex-M3为内核的32为微处理器,内核为ARM公司为要求高性能,低功耗,低成本,性价比高的嵌入式应用专门设计的Cortex-M内核。

1. STM32F1系列芯片介绍

STM32F103ZET6(战舰,精英版)与STM32F103RCT6(mini版)

  1. 内核
    -32位 高性能ARM Cortex-M3处理器
    -时钟:高达72M
    -单周期乘法和硬件除法
  2. IO口
    -STM32F103ZET6:144引脚 112个IO
    -STM32F103RCY6: 64引脚 51个IO
    -大部分IO口都耐5V
    -支持调试:SWD和JTAG
  3. 存储器容量:
    STM32F103ZET6: 512K FLASH,64K SRAM
    STM32F103RCT6: 256K FLASH,48K SRAM
  4. 时钟,复位和电源管理:
    ①2.0-3.6V电源和IO电压
    ②上电复位,掉电复位和可编程的电压监控
    ③强大的时钟系统
    -4~16M的外部高速晶振
    -内部8MHZ的高速RC振荡器
    -内部40KHZ低速RC振荡器,watchdog时钟
    -内部锁相环(PLL,倍频),一般系统时钟都是外部或内部高速时钟经过PLL倍频后得到
    -外部低速32.768K的晶振,主要做RTC的时钟源
  5. 低功耗:
    -睡眠,停止,和待机三种低功耗模式
    -可用电池为RTC和备份寄存器供电
  6. AD:
    -3个12位AD
    -转换范围:0~3.6V(电源电压)
    -内部通道可以用于内部温度测量
    -内置参考电压
  7. 定时器:
    -4个通用定时器
    -2个基本定时器
    -2个高级定时器
    -1个系统定时器
    -2个看门狗定时器
  8. 通信接口:
    -2个IIC接口
    -5个串口
    -3个SPI接口
    -1个CAN2.0
    -1个USB FS
    -1个SDIO

2. stm32系列的命名规律

目前本人使用的stm32系列开发板为stm32F103ZET6(精英版),其命名的规律如下图:在这里插入图片描述

3. 关于查找资料

-如果查找IO口是否独立,可查看《精英版IO引脚分配表》
-如果查找IO口与串口的关系,或其IO口的功能,或是否容忍5V,可查看《数据手册》的表5(FT表示容忍5V)。

二. IO端口与串口的区别

▶ IO实现简单的输入输出,没有通信协议,而串口是有通信协议的数据输入输出,而通信协议就是约定波特率,停止位,奇偶校验位,硬件流控制,收发模式等

三. 开发环境搭建

1. MDK软件安装

  1. 在“软件资料”里找到mdk5
  2. 安装mdk_514.exe
  3. 安装Keil.STM32F1xx_DFP.1.0.5.pack

2. USB串口驱动安装

  1. 在“软件资料”里找到CH340驱动
  2. 运行SETUP.exe

3. 程序下载方法

STM32的程序下载有多种方法:USB,串口,JTAG,SWD等。

(1). 串口下载

STM32的串口下载一般只能通过串口1下载,为了使用串口下载,首先要在板子上设置一下,在板子上把RXD和PA9(STM32的TXD),TXD和PA10(STM32的RXD)通过跳线帽连接起来,这样我们就把 CH340G 和 MCU 的串口 1 连接上了。(串口2可以用来串口通信但不能进行串口下载)

▶串口下载的原理如下图:
在这里插入图片描述
USB与MCU串口之间通过一个转换芯片(CH340)来将串口信号转换为USB信号,然后再将USB连接到电脑。这样就实现了串口与USB的通信。(类似于51单片机)

(2). 程序的烧录

stm32一般采用FlyMCU进行烧录。
运行该软件后注意设置好串口,波特率,hex文件的路径正确。
在这里插入图片描述
这里一定要选中“DTR的低电平复位,RTS高电平进BootLoader”

(3). STM32的启动模式

STM32直接通过两个引脚Boot0和Boot1设置启动模式
具体如下图:在这里插入图片描述
主闪存存储器启动:指运行板子flash memory里的程序

系统存储器启动:指通过串口下载

▶一般下载程序把Boot0和Boot1全置为0是因为stm32内部有一个自动下载电路,这就是为什么在下载程序时FlyMCU一定要选中“DTR的低电平复位,RTS高电平BootLoader”的原因。

4. JLINK下载

具体步骤如下:
-安装好MDK和JLINK驱动
-运行MDK,首先编译程序,必须error==0!
-点开设置,并选择debug
-选择JLINK后点击Setting
在这里插入图片描述
-在这个地方可以选择JTAG或者SW下载(JTAG一般选用5Mhz,SW一般选用10Mhz或者5Mhz)
在这里插入图片描述
-接下来点击Flash Download,再按如下配置
在这里插入图片描述
-最后回到设置里,点击Utilities,按图配置在这里插入图片描述
至此,JLINK的配置完成!
点击编译旁边的load即可下载程序!

四. 库函数和寄存器的区别

本质上是一样的。我们可以在库函数模板中直接操作寄存器,因为官方库相关头文件有寄存器定义。但是不能在寄存器模板中调用库函数,因为没有引入库函数相关定义。
了解寄存器基本原理可以让我们对stm32相关知识有比较深入的理解。如果底层代码配置出现了问题需要调试的话,必须对寄存器有一定的了解才能找到问题,因为调试代码,底层只能查看寄存器相关配置。

eg:要控制某个IO口的状态
在51单片机中:P0=0x11;
在stm32寄存器开发:GPIOx->BRR = 0x0011;
在stm32库函数开发:

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { 
   
GPIOx->BRR = GPIO_Pin;
}

这个时候你不需要再直接去操作 BRR寄存器了,你只需要知道怎么使用 GPIO_ResetBits()这个函数就可以了。

五. 新建工程模板-基于固件库

  1. 在建立工程之前,在电脑的某个目录下面建立一个文件夹(名字任意),后面所建立的工 程都可以放在这个文件夹下面,这里我以 “first” 为例子。
  2. 点击MDK的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹 first 之下,在这个目录下面建立子文件夹 USER(名字任意), 然后定位到 USER目录下面,我们的工程文件就都保存到 USER文件夹下面。工程命名为 first ,点击保存。
    在这里插入图片描述
    接下来会出现一个选择 CPU 的界面,就是选择我们的芯片型号。如下图所示,因为本人使用的是ALIENTEK 精英 STM32F103 ,所以型号为 STM32F103ZET6,所以在这里选择 STMicroelectronics->STM32F1 Series>STM32F103->STM32F103ZET6(如果使用的是其他系列 的芯片,选择相应的型号就可以了)
    在这里插入图片描述
  3. 现在 USER目录下面包含 2 个文件夹和 2 个文件在这里插入图片描述
    first.uvprojx 是工程文件,非常关键,不能轻易删除。Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件。我们不删除这两个文件夹也是没有关系的,只是我们不用它而已。
  4. 接下来在 first工程目录下面,新建 3 个文件夹 CORE, OBJ 以及 STM32F10x_FWLib。CORE 用来存放核心文件和启动文件,OBJ 是用来存放编译过程文件 以及 hex 文件,STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。
    在这里插入图片描述
  5. 将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。 打开官方固件库包,定位到我们之前准备好的固件库包的目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面, 将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。在这里插入图片描述
  6. 将固件库包里面相关的启动文件复制到我们的工程目录 CORE之下,打开官方固件库包,定位到目录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c 和 文 件 core_cm3.h 复 制 到 CORE 下 面 去 。 然 后 定 位 到 目 录 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 下面,将里面 startup_stm32f10x_hd.s 文件复制到 CORE 下面。
    现在看看我们的 CORE文件夹下面的文件:在这里插入图片描述
  7. 定位到目录: STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面 将里面的三个文件 stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h,复制到我们的 USER 目录之下。然后将 STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的 4 个文件 main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h 复制到 USER目录下面。
    在这里插入图片描述
  8. 下面我们将这些文件加入我们的工程中去。在MDK中右键点击 Target1,选择Manage Components.
  9. Project Targets一栏,我们将Target名字修改为first,然后在Groups一栏删掉一个Source Group1,建立三个 Groups:USER,CORE,FWLIB。然后点击 OK,可以看到Target 名字以及 Groups 情况。在这里插入图片描述
  10. 下面往 Group 里面添加我们需要的文件。我们按照步骤 9 的方法, 选择需要添加文件的 Group,这里第一步我们 选择 FWLIB , 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录 STM32F10x_FWLib/src 下面,将里面所有的文件选中点击 Add,然后 Close。
  11. 同样,将 Groups 定位到 CORE 和 USER下面,添加需要的文件。 CORE 下面需要添加的文件为 core_cm3.c,startup_stm32f10x_hd.s ,USER目录下面需要添加的文件为main.c,stm32f10x_it.c,system_stm32f10x.c. 这样需要添加的文件已经添加到工程中了,最后点击OK,回到工程主界面。在这里插入图片描述
  12. 接下来要编译工程,在编译之前首先要选择编译中间文件编译后存放目录。 方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选 择目录为上面新建的 OBJ 目录,并勾选Create HEX File。在这里插入图片描述
  13. 下面选择 c/c++选项.然后点击 Include Paths 右边的按钮。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添 加进去。在这里插入图片描述
    然后填写 “STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面。 这里如果用的是中容量那么 STM32F10X_HD修改为 STM32F10X_MD,小容 量修改为 STM32F10X_LD. 然后点击OK。
  14. 至此,一个工程就建立完毕,之后将main文件内的代码删除,输入你需要的代码即可。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183383.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 查看所有java进程命令_查看java线程

    查看所有java进程命令_查看java线程linux查看java进程数[2021-02-1008:01:50]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace(“/(\s|\&nbsp\;| |\xc2\xa0)/”,””,strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教linux查看端口被哪个进程占用的方法:1、使用“lsof-…

    2022年10月26日
  • 工厂设备状态监控可视化解决方案

    工厂设备状态监控可视化解决方案通过各种无线通信技术,将机器、人组成一个巨大的网络,通过这个网络,实现各种应用,工厂生产采用M2M技术,可实现远程实时监控设备的运行状态,实现自动化智能管理。系统框图功能特点场景应用…

  • linux平均负载什么意思_负荷率和负载率一样吗

    linux平均负载什么意思_负荷率和负载率一样吗1,Linux系统的平均负载是什么?特定时间间隔内运行队列中的平均进程数,好象还不够明白:就是进程队列的长度,有多少个进程在排队等待运行2,什么是”进程队列”?一个进程满足以下条件就会位于进程队列中1,它没有在等待I/O操作的结果2,它没有主动进入等待状态(即没有调用wait)3,它没有被停止3,如何查看平均负载?最简单的命令是uptime例子:[www.linuxidc.com@localho…

  • [trans] Thresholding Algorithm[通俗易懂]

    [trans] Thresholding Algorithm[通俗易懂]十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。     图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。 …

  • dz搬家 win linux,Discuz论坛完美搬家 详细分享我的DZ搬家步骤[通俗易懂]

    dz搬家 win linux,Discuz论坛完美搬家 详细分享我的DZ搬家步骤[通俗易懂]Discuz论坛完美搬家详细分享我的DZ搬家步骤由于论坛的迅速发展,普通的虚拟主机已经承受不住了,想要换成云服务器,却又不懂得如果搬家。通过网络以及网站客服的查询帮助,亲手实现了Discuz完美搬家。我在搬家时截了每个步骤的图,今天写下这篇文章,为大家详细解说一下。其实网站要搬家有好几种方法,但是要求完美搬家的话,就不没那么多了。很多人都在用帝国备份王进行数据库的备份,自我感觉帝国备份王确实要比…

  • 工具类BeanMap,BeanCopier

    工具类BeanMap,BeanCopier对象之间的转换;深度复制;1,BeanMap实现的是Map接口;将对象转换成Map非常简单;2,BeanCopier深度复制;Demo主要类:Test:/***Createdbyadminon2017/3/7.*/publicclassTest{publicstaticvoidmain(String[]args){

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号