STM32——STM32简介与创建工程

news2024/11/15 13:54:33

文章目录

  • 一、stm32简介
    • stm32MCU:
    • ARM:
    • 命名规则:
    • 片上资源/外设:
    • 系统结构:
    • 引脚的定义
      • 功能引脚介绍:
      • 最小系统引脚介绍:
      • 电源引脚介绍:
    • 启动配置
    • 最小系统电路
  • 二、软件安装
  • 三、新建工程
    • 固件库文件夹
    • 型号分类及缩写
    • 新建工程步骤
    • 工程架构
  • 其他

一、stm32简介

stm32MCU:

特点:

  • STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
  • STM32特色:硬件自动化,各个外设相互链接

stm32分类:
在这里插入图片描述

ARM:

ARM

  • ARM既指ARM公司,也指ARM处理器内核
  • ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
  • ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片

ST设计与ARM设计的关系:
在这里插入图片描述

ARM分类:
在这里插入图片描述

命名规则:

关于STM32F103C8T6的命名规则:
在这里插入图片描述
关于STM32 & STM8 等其他芯片的命名规则:
在这里插入图片描述
STM32F103C8T6的一些参数:

  • 系列:主流系列STM32F1
  • 内核:ARM Cortex-M3
  • 主频:72MHz(单片机的主频越高,其运算速度一般是越快;如果准确的时钟,需要使用外部晶振)
  • RAM:20K(SRAM:存储介质)
  • ROM:64K(Flash:闪存介质)程序存储器( 在断电情况下仍能保持所存储的数据信息 )
  • 供电:2.0~3.6V(标准3.3V)(51单片机是5V,USB供电是5V,如果需要给32供电要稳压芯片)
  • 封装:LQFP48

片上资源/外设:

STM32F103C8T6片上资源/外设:(深色是内核内的外设,其他是内核外的外设)

在这里插入图片描述

  • 外设:硬件电路,直接通过读写数据寄存器就可以完成发送和接收数据

STM32F103C8T6片上资源/外设的简单介绍:

在这里插入图片描述

  • F1芯片最后四个外设没有

系统结构:

在这里插入图片描述

  • ICode是用来加载程序指令的,Cortex-M3的控制器可以接收主存(Flash存储器)里面的指令操作码

  • 由于主存的读取速度与Cortex-M3的读取速度不一致,所以中间需要Flash接口,

  • DCode是用来传输数据的,比如常量和调试数据等,所以连接Flash闪存(程序)

  • FSMC为可变静态存储器控制器,扩展静态内存

  • SRAM用于存储程序运行时的变量,可以用作高速缓冲存储器

  • 桥接器:用于连接不同的总线,具有数据缓冲,转换和控制功能

  • AHB系统总线是挂载主要外设

  • AHB和APB2是72MHZ,APB1是36MHZ

  • DMA负责数据搬运,例如ADC的连续转化+扫描模式需要DMA

  • DMA拥有和CPU一样的总线控制权,绕过CPU直接访问内存与IO设备,主要是一些高速外设会发起DMA请求,DMA控制器会获取总线的访存控制权,此时CPU没有该控制器,会涉及总线控制权的争夺

  • SDIO:安全数字输入输出,定义了一种外设接口。

引脚的定义

颜色分类

  • 红色是电源相关引脚,类型为S
  • 蓝色是最小系统引脚
  • 绿色是IO口,功能口
    在这里插入图片描述

功能引脚介绍:

  • IO口电平为FT表示可以接收5v电压
  • 功能为VBAT是备用电池供电引脚,负责给外设RTC和BKP供电
  • TAMPER侵入检测,功能是电平变化时清空数据
  • RTC引脚用来输出RTC校准时钟,闹钟脉冲,秒脉冲
  • 34号接32.758KHZ的晶振,电路经过2的15次方分频,生成1秒的时间信号
  • VSSA和VDDA是模拟部分的电源,例如ADC,RC振荡器
  • wkup可以唤醒处于待机的STM32
  • 34/37-40是调试端口(下载端口),支持SWD(2根线)和JTAG(5根线)

最小系统引脚介绍:

  • 复位:NRST表示低电平复位引脚(n表示低电平)
  • 启动配置:BOOT0、BOOT1引脚是用来配置启动模式
  • 晶振:5、6号接8MHZ的主晶振,芯片内部有锁相环电路,对8MHZ频率进行倍频,产生72MHZ的主时钟。
  • 下载端口:34/37是调试端口(下载端口),支持SWD

在这里插入图片描述

电源引脚介绍:

  • VSSA_1_2_3\和VDDA_1_2_3\是系统的主电源口,因为采用分区供电方式,所以有多个引脚

在这里插入图片描述

启动配置

在这里插入图片描述

  • BOOT用来指定程序开始运行的位置,一般是主闪存存储器
  • 系统存储器模式用做串口下载,该存储器存储的是BootLoader程序,执行该程序可以将pc端代码数据刷新到主闪存中,当所有的调试接口都作为普通IO口时,可以采用这种方法
  • 执行跳线帽的变换后要点reset开关

最小系统电路

在这里插入图片描述

  • 连接最小系统引脚以及所需功能区的电源引脚
  • 复位电路的设计:上电瞬间是先低电平后高电平
    • 点击K1,上电的瞬间,相当于短路,给电容充电,NRST为低电平
    • K1复位,电容充满电的时候相当于断路,此时NRST被电源上拉为高电平
  • 滤波电容的作用是保证供电电压稳定,连接方式是一端接高电平,一端接地

二、软件安装

  • 安装Keil5 MDK(keil5 c51是给51单片机。keil5 MDK给ARM架构的芯片)
  • 安装器件支持包(因为芯片更新特别快,软件无法一直更新,通过器件支持包的形式来支持对应的芯片,例如stm32支持包)
  • 软件注册
  • 安装STLINK驱动
  • 安装USB转串口驱动

三、新建工程

固件库文件夹

在这里插入图片描述

  • 固件库主要文件在Libraries里面

型号分类及缩写

选择器件型号,因为启动文件要根据芯片型号和Flash内存大小

在这里插入图片描述

新建工程步骤

  • 建立工程文件夹,Keil中新建工程,选择器件型号(此处选stm32f103c8t6)

  • 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹

    • Start文件夹里面包含如下文件【工程架构中会介绍文件的作用】
      在这里插入图片描述

    • 以上文件的本地路径分别是

      • STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
      • STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
      • STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport
  • 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里

    • 将文件夹内的文件添加到工程分组里在这里插入图片描述
    • 选择所有文件
      在这里插入图片描述
  • 工程选项中添加头文件路径:点击魔术棒,C/C++,Include Paths内声明所有包含头文件(即含有.h的文件)的文件夹(因为是自己移入工程的)

    • 在这里插入图片描述
  • 工程里新建User文件夹并新建main.c文件

  • 添加User文件夹
    在这里插入图片描述

  • 添加新文件
    在这里插入图片描述

  • 选择文件类型和文件路径(主要要选择已经建立好的文件夹下)
    在这里插入图片描述

  • 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER,使用库函数就必须声明

  • 工程选项,Debug,下拉列表选择对应调试器ST-Link Debugger,点击右边Settings,Flash Download里勾选Reset and Run,下载程序后会立马复位执行

工程架构

在这里插入图片描述

  • startup_stm32f10x_md.s文件
    • 中断函数中调用了复位中断和其他中断(其他函数的参数用到的中断函数名就在该文件查询),完成设置初始SP(堆栈指针)、设置初始PC(程序计数器)、配置时钟系统

    • 复位中断首先调用SystemInit()函数,该函数在system_stm32f10x.h中定义(-system_stm32f10x.c和system_stm32f10x.h用来配置时钟)

      • 复位后函数调用顺序:startup_stm32f10x_cl.s(启动文件) → SystemInit() → SetSysClock () → SetSysClockTo72()
    • main函数文件中引入"stm32f10x.h"的头文件,该头文件中又引入 “stm32f10x_conf.h”(头文件包含关系配置)。因为"stm32f10x.h"使用条件编译的条件是USE_STDPERIPH_DRIVER,所以需要在Define内定义,在stm32f10x_conf.h中引入了Library中所有的库函数头文件
      在这里插入图片描述

    • 其他中断的函数定义不在"stm32f10x_it.h"中而在"startup_stm32f10x_md.s"文件中

    • stm32f10x.h是stm32的外设寄存器描述文件,作用和51单片机的REGX52.H一样,描述寄存器及其地址(外设描述文件)

    • core_cm3.h是内核寄存器描述文件

工程文件命名:

  • hardware——存储于硬件相关的程序
  • system——存储无硬件的程序
  • library——库函数程序
  • user——主程序

工程模板文件中执行keilkill.bat,会把Listings和Object里面的文件清空

其他

  • 对于所使用的硬件,其实是了解如何初始化时序图和读写时序图,也就是说硬件编程是看时序写驱动

  • 对于外设,需要了解其触发方式、通道配置、输出到哪里,写外设文件函数一般包含初始化函数和触发函数

  • W25Q64 Flash模块,存储数据并用spi总线进行通信

  • 旋转编码器=编码电机的霍尔传感器和光电传感器的输出

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

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

相关文章

2022年专业408的算法题

文章目录0 结果1 题目2 思路3 实现3.1 思路13.2 思路二0 结果 1 题目 2 思路 1,首先明确二叉搜索树的定义:任何一个节点大于其左子树中的全部结点,小于其右子树中的全部结点。中序遍历二叉搜索树得到一个升序序列。2,明确题目中给…

【微信小程序入门到精通】— 微信小程序实现多页面切换(tabBar)

目录前言一、tabBar 介绍二、实操(创建 tabBar )2.1 基本配置2.2 详细配置总结前言 对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢? 为此我特意开设此专栏,在我学习的…

mysql索引机制实现及自适应hash索引

一、介绍   哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1)。常用于连接(join)操作,如Oracle中的哈希连接(hash join)。 InnoDB存储…

canopen11-sdo-40读取命令

源码 参考文件 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服…

Linux多进程编程之exec函数族使用

Linux多进程编程之exec函数族使用1.exec函数族是什么2.execl函数具体使用3.execlp4.exec后面不同字母所代表的含义1.exec函数族是什么 顾名思义,它并不只是一个函数,而是以exec开头的六个函数,并且是没有exec这个函数的(就像TCP/…

几行代码演示linux kernel、libc、userSpace app的关系

问一:编译出来的Linux内核镜像(".\build\arch\arm64\boot\Image"),可以单独运行吗?答案是能,但是加载完就提示panic,然后死掉了。 原因是: 内核代码加载完后,一定要切换到低权限模式…

Wireshark TS | Packet Challenge 之 HTTP 案例分析

前言 来自于 Sharkfest Packet Challenge 中的一个数据包案例,Sharkfest 是 Wireshark 官方组织的一年一度的大会,致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次,近几年发展成一年两次&#xf…

我的2022年终总结

目录 1 序 1 2 工作 1 3 业余 1 3.1 AI 1 3.2 数学小插曲 3 3.3 金融投资 3 4 生活 4 5 最后 4 1 序 老婆大人每年这个时候都要写年终总结,现在也正在写;CSDN也发起了年终征文活动;各大app也各种年度大数据总结。我好像还是第一次写年终总…

两两交换链表中的节点 -- 虚拟头节点

24两两交换链表中的节点 – 虚拟头节点 通过本题可以: 增加对虚拟头节点的理解。 加强对链表这一基本数据结构的基本操作的理解。 1. 交换过程: 如图,假设链表如图所示。 为了减少对头节点的单独讨论,这里采用虚拟头节点进行…

Allegro如何显示走线和铜皮的网络名操作指导

Allegro如何显示走线和铜皮的网络名操作指导 在做PCB设计的时候,如果可以实时看到走线和铜皮的网络名,对于设计有很大帮助,如下图 具体操作如下 选择Set-up-user preferences选择Display

Vue 总结一(简介 基本语法)

目录 Vue 是什么 与其它 JS 框架的关联 Vue 周边库 MVVM模型 怎么用 Vue模板语法有2大类: 数据绑定 data 事件 v-on methods 计算属性 computed 监视属性 watch computed和watch之间的区别: 条件渲染 v-if v-show Vue 是什么 一个动态构建用…

sql根据团队树一级一级汇总统计

1、需求描述 最近碰到了一个需求,是要统计各个团队的员工的销售金额,然后一级一级向上汇总。 架构团队树是类似于这种样子的,需要先算出每个员工的销售金额,然后汇总成上一级的团队金额,然后各个团队的销售总金额再往上…

京东技术发展简史

文章目录前言京东发展历程京东商城技术的演进京东自研技术分布式数据库StarDB京东云移动端Flutter在京东的实践大数据咚咚架构ShardingSphere京东人物参考“京东可以高速发展到今天的规模的原因,其中最核心的是坚持“倒三角”战略:建立出色的团队&#x…

转义字符与strlen(),sizeof()在一起的注意事项

转义字符与strlen(),sizeof() 1. 转义字符每个人都知道是怎么一回事儿,转义字符顾名思义就是转变意思。 2. 首先转义字符肯定是一个字符,不是两个字符,更不用说是数字了,就是字符。 3. 当用strlen()统计字符串长度时或者用sizeo…

2022年度回顾

这一年是不平凡的一年,换了公司,新公司频繁出差,去了临沂,去了河南,去了唐山,去了福鼎,当中最印象深刻的还是河南,项目万分火急,在疫情隔绝的10月份毅然决然的前往河南安…

如何稍微优雅滴完成博文访问计数[SpringBoot+redis+分布式锁]

文章目录前言背景朴素做法Redis方案流量统计接口演示自定义注解计数实现防刷加锁完整代码数据一致性分析自定义注解返回值分析解决方案总结前言 okey,我们来收尾一下,这公历纪年2022年12月31日。这是本年度的最后一篇博文。那么这篇博文主要是用来实现博文的一个访…

【LeetCode】被围绕的区域 [M](深度优先遍历)

130. 被围绕的区域 - 力扣(LeetCode) 一、题目 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例 1: 输入:board [[&quo…

浅谈Flink批模式Adaptive Hash Join

Flink批Hash Join递归超限问题 随着Flink流批一体能力的迅速发展以及Flink SQL易用性的提升,越来越多的厂商开始将Flink作为离线批处理引擎使用。在我们使用Flink进行大规模join操作时,也许会发生如下的异常,导致任务失败: Hash j…

Es进阶检索

本文用到的测试数据及所有代码链接: https://blog.csdn.net/m0_62436868/article/details/128505566?spm1001.2014.3001.5501 1、SearchAPI ES 支持两种基本方式检索 : 一个是通过使用 REST request URI 发送搜索参数(uri检索参数) 另…

基于华为eNSP的中小企业办公园区网络规划与设计

目录一、需求分析(一)项目背景(二)网络业务需求(三)网络应用需求二、网络结构设计三、网络拓扑图四、网络设备基本配置五、项目测试结语运用到的技术有: 1、虚拟局域网(VLAN&#xf…