欢迎来到Introzo百科
Introzo百科
当前位置:网站首页 > 技术 > 正点原子stm32f103精英版原理图(正点原子stm32f103教程)

正点原子stm32f103精英版原理图(正点原子stm32f103教程)

日期:2023-09-27 13:02

正点原子stm32f103精英版原理图(正点原子stm32f103教程)

STM32 BOOT0 BOOT1 配置

如图所示,一般情况下如果我们想用用串口下载代码,则必须配置BOOT0为 1, BOOT1
为 0,而如果想让 STM32 一按复位键就开始跑代码,则需要配置 BOOT0 为 0,BOOT1 随便设,请参考正点原子的一键下载电路,这个电路比较好,不用繁琐的切换boot电平。

原理图:

启动方式:

1,第一种启动方式是最常用的用户FLASH启动。默认启动方式。

2, 第二种启动方式是STM32内嵌的SRAM启动。该模式用于调试 第三种启动方式是系统存储器启动方式。STM32中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0/1到该模式下重新烧写Flash即可恢复正常。

正点原子,STM32F103R8和ISO1050做CAN隔离在工业中常用吗

这个看你自己的需求了,一般应用TJA1050都够用了,不过tja是不带隔离的。

stm32寄存器开发的意义

本文主要是简述如何创建一个STM32的基础工程,以及在工程文件中所添加文件(头文件以及原文件)的意义。本文不使用RTE,使用的芯片为STM32F103ZET6,KEIL,使用LL相关库函数。因为文件的含义是根据本人的理解,可能存在错误的地方,欢迎讨论。
二、STM32文件架构
我们先来看下ARM的文件架构图
从图中我们不难看出,其实最简单的路径就是直接从Application Code(应用层代码)调用CMSIS-Core来实现对CPU-Core、Core-Peripherais、Other--Peripherais来运算和控制。这种方法可不可行呢,肯定是可行的。但是这样会存在一些问题。
第一:CMSIS-CORE中是对CORE和Peripherais的一些定义。这些定义一般是操作硬件的寄存器的结构体。例如你想要操作某一个外设,你就必须知道这个外设的每个寄存器的位置在哪里,以及每个寄存器的作用,并且确保你不会在设置寄存器的值的时候出错。这种方式称为寄存器开发
第二:即使不怕困难完成了第一步,那么接下来你就会面临第二个问题:移植。你通过第一步完成的程序的移植性是很低的。为什么呢?你每切换一款芯片都会可能导致不兼容,因为即使采用的同一个框架,每个厂家都可以根据自己的需求去改变外设的数量以及位置。这就可能导致你在应用层设置的寄存器地址和结构是不通用,甚至同一个厂家同一个架构下也会有不同型号的芯片,那就更加不用提更换厂家甚至是更换芯片架构的情况了。
为了解决寄存器开发的不足,Silicon Vendor(生产制造商)提供了一套叫做HAL(硬件抽象层)的东西。什么是HAL?按照个人理解就是把操作硬件也就是操作寄存器的动作有机的封装起来,让我们不再需要去关注怎么操作寄存器也就是硬件,而是使用了一些有意义的宏或者函数来代替,方便我们的编写程序。这个解决了上面的问题一。对于问题二是怎么解决的呢,刚才也说到HAl使用了一些有意义的宏或者函数来代替,这些宏或者函数在这个厂家对每一个同架构的芯片都是一样。例如在STM32F1的串口初始化的LL库函数为LL_USART_Init(USART1),那么即使你切换到STM32F3也是在应用层调用LL_USART_Init(USART1),只需要把STM32的HAL文件替换为STM32F3的HAL文件就行,如果他们USART1外设的寄存器位置不一样,那么在HAL文件的定义中就已经修改好了,应用层的代码无需修改。这样就大大的减少了移植的难度。
现在我们的路径变为了Application Code(应用层代码)------>DEVICE HAL -------->CMSIS-Core -------->CPU-Core、Core-Peripherais、Other--Peripherais。这种方式我们称为库函数开发。
三、库函数开发的基础工程文件(不带系统)
根据上面的描述,我们把文件分成四个大的部分(不带系统):CMSIS-CORE,STARTUP,HAL,Application Code
其中CMSIS-CORE也会细分三个部分:Peripherais-CORE,Peripherais-Device,compiler:
Peripherais-CORE:
具体文件:
1.cmsis_compiler.h(compiler)
2.cmsis_armcc.h (compiler)
3.cmsis_version.h (compiler)
4.core_cm3.h (Peripherais-CORE)
5.stm32f1xx.h (Peripherais-Device)
6.stm32f103xe.h (Peripherais-Device)
1.cmsis_compiler.h
该文件是一个编译声明文件,主要作用:
1.声明使用哪个编译器编译。本文采用的Keil的环境所以使用的是armcc的编译方式
2.cmsis_armcc.h
该文件是一个编译器头文件,主要作用:
1.申明编译器的部分特殊寄存器的操作
3.cmsis_version.h
该文件是一个编译器版本文件,主要作用:
1.申明编译器的版本
4.core_cm3.h
该文件的是一个申明M3架构的内核外设的文件,主要作用:
1.申明core_register
2.申明NVIC_register
3.申明SCB_register
4.申明Systick_register
5.申明Debug_register
6.申明MPU_register(可选)
5.stm32f1xx.h
该文件使用制造商提供的头文件,主要作用是:
1.根据Keil的宏定义去添加对于F1系列芯片的外设申明文件
6.stm32f103xe.h
该文件的使用制造商的头文件,主要作用是:
1.申明stm32f103系列芯片的所有外部外设的中断、位置,结构体,以及寄存器操作的相关宏定义
Startup:
1.startup_stm32f103xe.s
2.system_stm32f1xx.c
3.system_stm32f1xx.h
1.startup_stm32f103xe.s
该文件是一个启动文件,主要的作用有:
1.初始化堆栈
2.异常以及中断的定义,以及部分异常的实现
3.调用SystemInit函数初始化时钟(system)
4.调动main函数进入application code
2.system_stm32f1xx.c
该文件主要是系统时钟初始换函数实现。主要作用:
1.初始化时钟
3.system_stm32f1xx.h
该文件主要是系统时钟初始换函数申明。主要作用:
1.申明时钟初始化函数
HAL:本文采用的ST的LL库,下面采用的也是LL库的示例。目前示例的工程的点亮一个LED
1. stm32f1xx_ll_bus.h
该文件主要是申明对外设总线时钟操作宏定义。主要作用:
1.定义总线时钟相关的操作
2.stm32f1xx_ll_gpio.c 和stm32f1xx_ll_gpio.c
这两个文件是LL库对GPIO外设文件,主要作用:
1.对GPIO外设数量、位置、结构、基本操作的申明以及定义
3.其他:LL库线的C文件以及H文件还有很多,我们可以根据我们自己的需要进行添加,不一定需要把整个LL库都添加进去。例如:ADC,USART等等等等。该工程只是点亮LED,所以不需要其他文件。LL库的头文件以及源文件有以下这些(STM32F1系列)
Application Code:应用层代码,主要是我们业务逻辑。该工程只有main.c文件,用于点亮LED
main.c的主要代码如下:
整体文件架构图:
PS:以上就是该项目的本地树结构。该结构只是个人的风格,每个人可以根据自己的风格创建自己的结构
三、如何在KEIL中建立该工程并编译烧录
1、KEIL安装,网上有很多优秀的文章,自行参考,不在赘述
2、建立基本工程(选择芯片STMF103ZE)
3、建立工程文件架构、添加源文件。参考其他文章。个人喜欢和本地目录的架构保持一致,添加好文件后的Keil工程架构如图:
4.添加头文件到编译路径
魔术棒----》c/c++------》Include Paths
5.添加全局的宏定义
STM32F103xE和USE_FULL_LL_DRIVER
STM32F103xE:用于告诉stm32f1xx文件,最后添加f1系列具体哪个型号的头文件进来
USE_FULL_LL_DRIVER:用来启动LL库的编译。
6.编写application code(main.c)文件
7.编译
8.烧录(需要连接电脑,模拟器,芯片)具体你使用的是哪个模拟器相关设置请参考其他文章
9.LED指示灯正常亮起。
四、总结
至此,一个最最最基本的用LL库去点亮LED的工程已经建好了。本文只是在描述stm32工程文件的架构思路,在实际应用中你们可以使用的不同框架以及型号的芯片,不要照搬,要懂得根据自己的实际情况是使用合适的文件。本文仅作为参考
打开CSDN APP,看更多技术内容
STM32 三种开发方式:寄存器、标准库函数、HAL库_太阳火神的美丽人生的博...
STM32 单片机是由芯片内嵌的处理器内核和外设电路构成,相当于PC电脑的CPU、内存、主板、硬盘,所有这些都集成在一块不到一厘米见方的芯片中,通过引脚与外围电路集成,连接不同设备,以不同协议进行通过,如 USART、SPI、IIC、CAN,所有这些...
继续访问
STM32笔记(二)初识寄存器与固件库开发的简介_CYRIL0124的博客-CSDN博 ...
后面我们还可以再定义一个函数用于操作所需要操作的寄存器,这时候只需要填入参数就可以实现运用函数来操作配置各种寄存器或者各种外设的功能了,这也就是固件库实现的基本思想。 这是固件库操作GPIO外设的一个函数,可以简单参考一下 ...
继续访问
stm32入门 第二周 IO口实验,了解库函数开发和寄存器开发的区别
本文内容基于https://www.introzo.com/video/BV1Lx411Z7Qa P11 GPIO工作模式: 输入模式1:浮空输入 输入模式2:输入上拉模式 输入模式3:输入下拉模式 由于浮空输入模式的电压不确定,容易误读,检测高电平时一般用输入下拉模式,检测低电平时一般用输入上拉模式。 输入模式4:模拟模式 输出模式1:开漏输出 输出控制电路输出1时,N-MOS断开,实际输出由外部上拉下拉决定,输出0时,N-MOS闭合,实际输出0,实际输出可以由输入数据..
继续访问
Stm32寄存器与库函数概览(摘自固件库使用手册).doc
本手册内容为STM32各标准库操作相应寄存器的手册,可为STM32库函数开发提供参考
STM32寄存器版和库函数版.zip
STM32寄存器版和库函数版,配合stm32日更2nd使用更佳,本文讲述了STM32寄存器版和库函数版的创建
Stm32寄存器与库函数概览(摘自固件库使用手册).zip
在网上看到一份关于STM32单片机开发资料,其中整理了STM32单片机常用寄存器的名称和功能,还有各个功能相关库函数的函数名和函数功能。可做为开发时的参考。
STM32学习笔记(二):新建STM32F103工程
1、前言 前面已经介绍了怎么安装keil5.29和破解keil5.29,下面进行STM32F103的新建工程。 2、工程的准备 在进行创建工程前,需要做好如下几个前提。 1)STM32F103的芯片包 2)准备好STM32的固件库 3)创建好工程文件和目录 以下为上面三个准备的步骤: 2.1:芯片包的下载 下面这个是芯片包的官方下载地址。 链接:https://www.introzo.com/dd2/Pack/ 下载完芯片包之后直接双击打开进行安装就行了,这个安装的路劲是默认的,就是你的keil安装的路劲下的某个文件夹,这个不用理会,直接傻瓜式点击下一步,一直点击就行了,然后等待安装 大家可以下载相
STM32学习笔记1:KEIL5配置stm32开发环境,以及新建工程的步骤。
一、下载安装keil5.(这里不多做介绍,网上有很多资料了) 二、下载安装stm32的pack包。 –>pack包下载链接点这里 正常界面如下,使用浏览器的ctrl+F功能快速搜索到对应的系列进行下载。 如果网页打不开,或者找不到下载包的地方,解决方法请点击这里。 下载下来的包是一个zip文件。这个包应该有两种使用方法。我目前尝试的是第一种,后续再补第二种。 第一种: 把后缀名改zip改为pack,然后双击打开安装。这样是直接集成到keil软件里面了。这种方法快可以快速上手,配置简单。但是一旦更
继续访问
STM32官方标准固件库开发与寄存器开发的区别
一句话概括关系:固件库就是函数的集合,固件库函数的作用就是:向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。对于STM32这种级别的MCU,数百个寄存器记起来何谈容易,于是推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一套API供开发者使用。大多数情况下,你不需要知道操作的是哪个寄存器,你只需要知道调用哪些函数即可。 对比一下:入下面只需要知道GPIO_SetBi...
继续访问
最新发布 STM32使用寄存器开发底层驱动学习(USART+DMA)
代码简洁明了,当然需要我们注释好,不然比标准库更难看懂。方便快捷,只需要一本《手册》就可以查看所有的寄存器,不需要像标准库那样记、找每个函数、每个参数的作用。
继续访问
STM32之GPIO配置(寄存器/库函数)
GPIO初始化结构体 GPIO初始化 先声明GPIO初始化的结构体;然后打开GPIO所挂载的总线的时钟;再对结构体成员进行配置,包括GPIO的引脚,模式,速度;最后对GPIO的结构体进行初始化并选定指定的GPIO组。 GPIO_Mode相关内容 模拟输入、浮空输入、下拉输入、上拉输入、通用开漏输出、通用推挽输出、复用开漏输出、复用推挽输出。 GPIO相关函数 ①GPIO初始化函数 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_In
继续访问
库函数开发与寄存器开发
在以前 8 位机时代的程序开发中,一般直接配置芯片的寄存器,控制芯片的工作方式,如中断,定时器等。配置的时候,常常要查阅寄存器表,看用到哪些配置位,为了配置某功能,该置 1还是置 0。这些都是很琐碎的、机械的工作,因为 8位机的软件相对来说较简单,而且资源很有限,所以可以直接配置寄存器的方式来开发。 对于 STM32,因为外设资源丰富,带来的必然是寄存器的数量和复杂度的增加,这时直接配置寄存器方...
继续访问
cmsis_iar.h
发现了"cmsis_iar.h",需要的人可以下载来看看!
C语言中头文件和源文件的注意事项
C语言中头文件和源文件的注意事项 文章目录C语言中头文件和源文件的注意事项0.前言1.实现步骤1.1 拆分前1.2 拆分后2.总结2.1头文件内容2.2 源文件(.c)内容2.3 函数声明和定义 0.前言 因为C语言编程或者C++语言编程,经常要添加头文件,不像Python中直接引入第三库就可以(import),但是嵌入式编程中C还是主流,Python目前这方面的应用还是比较少的,故如果完成一个大...
继续访问
C++中头文件与源文件的区别
本文转自:http://www.introzo.com/article-451-1.html 一、源文件如何根据#include来关联头文件   1,系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找。   2,用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找,然后在到C++安装目录(比如VC中可以指定和修改库文件查找路径,Unix和Linux中可以通过环境变量来
继续访问
STM32库函数与寄存器的区别
#STM32库函数与寄存器# 1.固件库是什么?与寄存器有什么关系? 固件库就是函数的集合,向下与寄存器直接打交道,向上提供用户调用函数的接口(API) 2.最佳使用情况 寄存器:单独对IO口状态控制,对寄存器进行位操作(如51) 调试debug时对寄存器进行位操作(需要理解与什么寄存器有关并理解过程,调试时翻阅寄存器手册) 库函数:寄存器数量过多(如STM32)调用库函数 ...
继续访问
stm32初学者是应该学寄存器好还是学库函数好?
作者:jiwangbujiu链接:https://www.introzo.com/question/30409588/answer/244613385来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我个人认为,在回答这个问题之前,你得先问清楚自己,我学习stm32、或者再往更深的地方走,我学习单片机,究竟是为了什么?你现在是处于什么状态?你是学生还是已经参加工作了?你的专...
继续访问
AT24CXX系列芯片在STM32F103单片机下的读写程序
本程序取自正点原子开发板,应用于STM32F103单片机,适用AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256,AT24C512系列I2C存储芯片。 一、sys.h #ifndef __SYS_H #define __SYS_H #include "stm32f10x.h" //////////////////////////////////////////////////////////////.
继续访问
STM32开发方式及基本介绍
STM32的开发有三种方式 1.寄存器版本 2.库函数版本 3.HAL库版本 一、库函数开发与寄存器开发的关系 很多人都是从学51单片机转而想进一步学习STM32,他们习惯了51单片机的寄存器开发方式,ST官方库摆在面前会不知道从何下手。其实简单来说,固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口。 举一个例子来解释 STM32 固件库到底是什么,和寄存器开发有什么关系。 在51的开发中我们常常是直接操作寄存器,比如要控制某些 IO 口的状态,我们直接
继续访问
热门推荐 STM32库函数和寄存器的区别
库函数版和寄存器版的系统时钟设置的区别: **1.**库函数的目的是让用户应用的,而寄存器更加原始 库函数的系统时钟是默认设置的,且放在启动文件里。而寄存器版的系统时钟是Stm32_Clock_Init(336,8,2,7);. **2.**库函数的快捷的,但不是每个芯片都有的;寄存器是复杂的,但是每个芯片厂商都有提供系统的寄存器设置信息。 分别打开库函数和寄存器版的I/O口设置: 库函数: RC...
继续访问
CMSIS玩家的“阴间成就”指南
【说在前面的话】认真说起来,从事嵌入式系统开发职业的“玩家”们基本都听说过CMSIS吧?虽然不清楚它在系统中具体“有什么卵用”,但或多或少都接受过“CMSIS的毒打”——不知不觉间,达成了...
继续访问
C 语言操作寄存器开发
在使用C语言操作寄存器前,仍需要先分析《开发板原理图》和《参考手册》,从而得知需要操作哪些外设寄存器,假设读者已经了解需要操作哪些外设寄存器。 本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语言操作寄存器开发\”。 使用C语言之前,需要先设置栈,如代码段 6.3.1 所示,在上电复位后立即设置栈,随后跳入main函数执行。 代码段 6.3.1 设置栈(startup_stm32f10x_hd.s) ; Reset handler Reset_H
继续访问
stm32寄存器开发与库开发
stm32

STM32F103RCT6和STM32f103RBT6区别

应该能通,我有STM32F103RCT6开发板,献上原理图。

以上就是小编对于正点原子stm32f103精英版原理图(正点原子stm32f103教程)问题和相关问题的解答了,正点原子stm32f103精英版原理图(正点原子stm32f103教程)的问题希望对你有用!

关灯