一天入门STM32
零基础学习STM32之入门学习路线
![零基础学习STM32之入门学习路线](https://img.taocdn.com/s3/m/0b0682c377a20029bd64783e0912a21614797fc9.png)
零基础学习STM32之⼊门学习路线 可以说就⽬前的市场需求来看,stm32在单⽚机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝⼤部分的stm32的学习者是在⼊门阶段的,所以今天我们就来聊聊stm32的⼊门学习路线。
先来看个图,相信会有所了解。
⾸先学习stm32 不管是C语⾔还是汇编肯定跑不了的所以C语⾔⼀样要打好基础,尤其是C语⾔中的指针,结构体,循环等等⼀些最基础的知识你要能够熟练应⽤,要不然对于从事stm32开发的难度是⾮常⼤的。
针对C语⾔我给⼤家推荐⼀个视频资料虽然是某某机构录的资料不过讲的倒是很详细值得⼀看 C语⾔⼊门视频教程_9天精通Linux C语⾔ 书籍的话其实不⽤买纸质的现在晚上电⼦版的pdf很多可以搜⼀下,我推荐两本《C和指针》《C语⾔核⼼技术》看着都还可以,⽹上就有我就不上传了。
然后就是要学会读stm32⼿册,不要⼩看这个现在市⾯上stm32的本⼦很多,原⼦,野⽕等等每⼀个公司的板⼦多少有些不同,没必要都去学会如果是那样我们的学习成本会成倍增长,毕竟每学习⼀个板⼦就要买⼀块板⼦,所以学会⼀个板⼦之后其他板⼦也是有很多相同的不同的那⼀部分我们学会读⼿册和⽂档就OK了。
⾄于其中的⼀些细节只是像什么中断,时钟,外设,ADC,DMA就不给⼤家⼀⼀介绍了⾃⼰找⼀套系统的学习资料就OK了,现在免费的多的是就算⾃⼰找个群进去要⼀套,遇到好⼼的⽹友给你⼀套也是有可能的,实在不⾏花个⼏⼗块钱⾃⼰去买⼀套,为了学习投⼊,这个⽆可厚⾮。
最后我再给⼤家推荐⼀个串⼝和⼀个直流电机驱动与测速的资料,玩⼩车和四轴想⾃⼰搞点⼩玩意的可以看看 ------------------------------------------ (stm32串⼝应⽤) 概念这么多,我该如何学 ------------------------------------------ 对于⼊门的朋友希望能够看在学成之后的薪资的⾯⼉上坚持住,其实只要坚持努⼒学习,总会等到苦尽⽢来的那⼀天。
STM32使用说明
![STM32使用说明](https://img.taocdn.com/s3/m/41b1098e0408763231126edb6f1aff00bed57017.png)
STM32使用说明STM32是一系列由STMicroelectronics公司开发的32位微控制器,它们集成了处理器核、存储器和外设,并能够在嵌入式系统中控制硬件设备。
STM32系列芯片为工业控制、汽车电子、消费电子等领域的各种应用提供了高性能和低功耗的解决方案。
下面将介绍STM32的使用说明,包括其主要特性、开发工具和开发流程。
首先,STM32微控制器的主要特性如下:1. 32位核心处理器:STM32系列采用ARM Cortex-M处理器,具有高性能和低功耗的特点。
2.多种型号选择:STM32微控制器有多种不同型号可供选择,包括主频、封装、存储容量等方面的差异,以满足不同应用的需求。
3.丰富的外设:STM32集成了丰富的外设,包括通用输入输出(GPIO)、通用串行接口(USART)、SPI接口、I2C接口、定时器和PWM 生成器等,可用于连接各种外部传感器和执行器。
4.低功耗模式:STM32支持多种低功耗模式,通过灵活地控制功耗,可以延长电池寿命或减少功耗。
5. 丰富的开发生态系统:STMicroelectronics为STM32提供了完整的开发工具链和开发文档,包括编译器、调试器、开发板和软件库等,方便开发者进行应用开发和调试。
其次,STM32的开发工具包括以下几个方面:1. STM32Cube软件套件:这是STMicroelectronics提供的一套软件工具,用于开发和配置STM32芯片。
它包括STM32CubeMX配置工具和STM32Cube库,可以帮助开发者生成初始化代码、配置外设和生成项目模板。
2. Keil MDK:Keil是ARM公司提供的一套开发工具,包括C编译器、调试器和集成开发环境(IDE),可以用于编写、编译和调试STM32的应用程序。
3. IAR Embedded Workbench:IAR是一家瑞典公司开发的嵌入式开发工具,包括C编译器、调试器和IDE,在STM32的开发中也有广泛应用。
STM32入门教程
![STM32入门教程](https://img.taocdn.com/s3/m/8ce84f9be53a580217fcfe15.png)
前言一天入门STM32,仅一天的时间,是否有真的这么快。
不同的人对入门的理解不一样,这篇一天入门STM32的教程,我们先对入门达成一个共识,如果你有异议,一天入门不了,请不要较真,不要骂街,保持一个工程师该有的修养,默默潜心学习,因为你还有很大的上升空间。
我眼中的入门:(前提是你学过51单片机和C语言)1、知道参考官方的什么资料来学习,而不是陷入一大堆资料中无从下手。
2、知道如何参考官方的手册和官方的代码来独立写自己的程序,而不是一味的看到人家写的代码就觉得人家很牛逼。
3、消除对STM32的恐惧,消除对库开发的恐惧,学习是一个快乐而富有成就感的过程。
第1章一天入门STM32本章参考资料:《STM32中文参考手册》《CM3权威指南CnR2》学习本章时,配合《STM32中文参考手册》GPIO章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。
1.151与STM32简介51是嵌入式学习中一款入门级的精典MCU,因其结构简单,易于教学,且可以通过串口编程而不需要额外的仿真器,所以在教学时被大量采用,至今很多大学在嵌入式教学中用的还是51。
51诞生于70年代,属于传统的8位单片机,如今,久经岁月的洗礼,既有其辉煌又有其不足。
现在的市场产品竞争激烈,对成本极其敏感,相应地对MCU的要求也更苛刻:功能更多,功耗更低,易用界面和多任务。
面对这些要求,51现有的资源就显得得抓襟见肘了。
所以无论是高校教学还是市场需求,都急需一款新的MCU来为这个领域注入新的活力。
基于这市场的需求,ARM公司推出了其全新的基于ARMv7架构的32位Cortex-M3微控制器内核。
紧随其后,ST(意法半导体)公司就推出了基于Cortex-M3内核的MCU—STM32。
STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多Cortex-M3MCU中脱颖而出,成为最闪亮的一颗新星。
STM32一上市就迅速占领了中低端MCU市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。
stm32自学笔记共20页
![stm32自学笔记共20页](https://img.taocdn.com/s3/m/e7a36e42bb4cf7ec4bfed012.png)
•
LED0=1;
•
LED1=0;
•
delay_ms(300);
•
}
•}
第二章 跑马灯实验
• Led.c函数
• void LED_Init(void)
•{
•
RCC->APB2ENR|=1<<2; //使能PORTA时钟
•
GPIOA->CRH|=0XFFFFFFFF3;//PA8 推挽输出
•
GPIOA->ODR|=1<<8; //PA8 输出高
• JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD,在原理图上可以看 到PA13和PA15为键盘和JTAG与SWD所共用,而这两种方针接口,他们 和普通的IO口公用,当想使用普通IO口时,必须先把他们关闭。在这 个函数里面设置参数,如果为二进制数00,则代表全部使能,如果是 二进制数01,则是能SWD,如果是10,则表示全部关闭。JTAG是一种 国际标准测试协议,主要用于芯片内部的测试。
• }要想实现一个点亮led小灯的功能,最少只需对3个寄存器进行设 置,第一步是设置外设时钟使能先把PORTA时钟使能,接下来把IO
口设置为输出,在接下来设置输出为高电平还是低电平,这里使用 推挽输出(3.3v),推挽输出主要是增强驱动能力,为外部提供大电 流。
第二章 跑马灯实验
• #ifndef __LED_H • #define __LED_H • #include "sys.h" • #define LED0 PAout(8)// PA8 • #define LED1 PDout(2)// PD2 • void LED_Init(void);//初始化
STM32通俗介绍
![STM32通俗介绍](https://img.taocdn.com/s3/m/9d60f4ef4afe04a1b071de2a.png)
简述1STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出)①浮空输入_IN_FLOATING②带上拉输入_IPU③带下拉输入_IPD(所谓上拉就是接一电阻到电源;下拉就是接一电阻到地。
也就是说带上拉就是口初始的时候是高电平,下拉就是低电平。
)④模拟输入_AIN⑤开漏输出_OUT_OD⑥推挽输出_OUT_PP⑦复用功能的推挽输出_AF_PP⑧复用功能的开漏输出_AF_OD1.1 I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。
通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。
当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。
比如:1.1.1 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
1.1.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
1.1.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
输入模式。
1.4 所有端口都有外部中断能力。
为了使用外部中断线,端口必须配置成输入模式。
1.5 GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。
2 在STM32中如何配置片内外设使用的IO端口首先,一个外设经过①配置输入的时钟和②初始化后即被激活(开启);③如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则该外设对应的输入输出管脚可以做普通GPIO管脚使用);④再对外设进行详细配置。
最简单的STM32入门教程
![最简单的STM32入门教程](https://img.taocdn.com/s3/m/60cad2ea9f3143323968011ca300a6c30c22f189.png)
最简单的STM32入门教程展开全文本文讲述的是如何从零开始,使用keil建立一个简单的STM32的工程,并闪烁LED灯,给小白看。
第零步,当然首先你得有一个STM32的板子,其IO口上接了一个LED。
第一步,建立一个文件夹0.0第二步,打开keil,建立工程在弹出来的对话框中选择你所用的STM32的芯片。
在接下来弹出来的对话框中选择是,这样keil就帮我们建立好了启动文件。
第三步,新建一个main.c文件,并添加到工程中。
点击New按钮,建立一个文本文件。
在建立的文本文件中输入C中的main函数点击保存保存后,将文件添加到工程中第四步,点击编译可以看到keil有报错错误信息为:没有定义的符号SystemInit ,这是因为在启动文件中有调用SystemInit 函数,但是我们没有定义它,如下图:暂时不用理会上述启动文件中汇编的含义,只需在main.c 中添加该函数即可消除该错误。
修改后再编译,程序没有报错了。
至此,一个STM32的工程就建立完成了。
第五步,将下面的代码复制粘贴1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #define PERIPH_BASE ((unsigned int)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) #define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) #define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))//#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8 typedef struct{volatile unsigned int CR;volatile unsigned int CFGR;volatile unsigned int CIR;volatile unsigned int APB2RSTR;volatile unsigned int APB1RSTR;volatile unsigned int AHBENR;volatile unsigned int APB2ENR;volatile unsigned int APB1ENR;volatile unsigned int BDCR;volatile unsigned int CSR;} RCC_TypeDef;#define RCC ((RCC_TypeDef *)0x40021000)typedef struct{volatile unsigned int CRL;volatile unsigned int CRH;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsigned int BSRR;volatile unsigned int BRR;volatile unsigned int LCKR;} GPIO_TypeDef;#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)void LEDInit(void){RCC->APB2ENR|=1<<2; //GPIOA 时钟开启GPIOA->CRH&=0XFFFFFFF0;GPIOA->CRH|=0X00000003;}//粗略延时void Delay_ms(volatile unsigned int t){unsigned int i,n;for(n=0;n<t;n++)for(i=0;i<800;i++);}int main(void){LEDInit();636465666768697071727374757677787980818283 while(1){LED0=0;Delay_ms(500);LED0=1;Delay_ms(500); }}void SystemInit(void){}下面一段是对代码的简单讲解,可不用太深入。
stm32 cube programmer 使用说明
![stm32 cube programmer 使用说明](https://img.taocdn.com/s3/m/26e5a79f6e1aff00bed5b9f3f90f76c660374c6a.png)
stm32 cube programmer 使用说明STM32 Cube Programmer 是一款用于编程和调试ST微电子公司的STM32微控制器的软件工具。
本文将为您提供使用STM32 Cube Programmer的详细说明,以帮助您快速上手。
1. 软件安装:您需要从ST微电子公司的官方网站上下载并安装STM32 Cube Programmer软件。
安装完成后,您可以在开始菜单中找到并启动该软件。
2. 连接硬件:在开始使用STM32 Cube Programmer之前,您需要确保您的STM32微控制器板卡已经正确连接到计算机。
请使用USB线缆将STM32板卡连接到计算机的USB端口。
3. 打开工程:在STM32 Cube Programmer的主界面上,点击“File”并选择“Open Project”选项,然后导航到您的工程文件所在的位置。
选择并打开您要进行编程的工程文件。
4. 配置目标设置:在左侧"Target"选项卡中,选择与您所使用的STM32微控制器主板对应的型号。
您还可以选择烧录器件的存储器类型和起始地址。
5. 配置编程操作:在"Read & Write"选项卡中,您可以选择读取或编写操作。
选择“Read”以读取目标设备的存储器数据,或选择“Write”以将编程文件烧录到目标设备。
6. 选择编程文件:在"File"选项卡中,点击“Browse”按钮以导航到您的编程文件所在的位置。
选择正确的文件并点击“打开”将其载入STM32 Cube Programmer。
7. 开始编程:确保您已经正确连接了目标设备并选择了正确的编程文件后,点击"Run"选项卡中的“Start”按钮以开始编程操作。
软件将自动执行编程过程并显示进度和结果。
8. 调试功能:STM32 Cube Programmer还提供了调试功能,您可以使用该工具进行调试操作以检查程序的运行状态。
stm32编程流程
![stm32编程流程](https://img.taocdn.com/s3/m/f6cf279277a20029bd64783e0912a21614797fdf.png)
stm32编程流程一、准备工作在开始进行STM32编程之前,我们需要进行一些准备工作,包括以下几个方面:1. 硬件准备:选择适合的STM32开发板或芯片,确保其具备所需的功能和性能。
2. 软件准备:下载安装相应的开发工具,如Keil MDK或IAR Embedded Workbench,并确保其与所选硬件兼容。
3. 学习资料:阅读有关STM32系列微控制器的相关文档和参考手册,熟悉其架构、功能和寄存器设置等信息。
二、编程环境设置在进行STM32编程之前,我们需要进行编程环境的设置,包括以下几个方面:1. 创建工程:在开发工具中创建一个新的工程,选择适合的目标芯片,并设置工程的名称和保存路径。
2. 配置工程:对工程进行一些基本设置,如选择编译器、设置编译选项、配置调试器等。
3. 导入库文件:根据需要,导入相应的库文件,以便在编程过程中使用已封装好的函数和驱动程序。
三、编写代码在编程环境设置完成后,我们可以开始编写代码,包括以下几个步骤:1. 初始化系统:配置系统时钟、中断向量表、外设时钟等,以确保系统正常运行。
2. 配置外设:根据实际需求,配置各个外设的工作模式、时钟源、中断使能等参数。
3. 编写主程序:编写主程序的逻辑,包括数据处理、控制算法、通信协议等。
4. 编写中断服务程序:根据需要,编写中断服务程序来处理外部中断、定时器中断等事件。
四、编译和调试在代码编写完成后,我们需要进行编译和调试,以确保代码的正确性和可靠性,包括以下几个步骤:1. 编译代码:使用开发工具提供的编译器对代码进行编译,检查是否有语法错误和警告信息。
2. 烧录程序:将编译生成的可执行文件烧录到目标芯片中,以便在硬件上运行和测试。
3. 调试程序:使用调试器和仿真器等工具,对程序进行单步调试、观察变量值和寄存器状态等。
五、测试和优化在完成编译和调试后,我们需要对程序进行测试和优化,以确保其性能和稳定性,包括以下几个步骤:1. 功能测试:对程序的各个功能进行测试,确保其符合预期的行为和结果。
STM32新手常见的一个错误并给出解决方法
![STM32新手常见的一个错误并给出解决方法](https://img.taocdn.com/s3/m/9670d263492fb4daa58da0116c175f0e7cd1193b.png)
STM32新手常见的一个错误并给出解决方法在使用STM32微控制器进行开发时,新手常常会遇到一些常见的错误。
以下是一些常见错误以及对应的解决方法,帮助新手更好地克服这些问题。
1.芯片未正确连接:通常情况下,STM32芯片应与开发板正确连接。
新手可能会出现错误的连接方式,例如将芯片倒置或错位连接。
解决这个问题的方法是仔细查看芯片的引脚图并确保正确地连接所有的引脚。
2.引脚配置错误:STM32微控制器具有多功能引脚,可以根据需要进行不同功能的配置。
新手可能会错误地配置引脚,导致功能无法正常工作。
解决这个问题的方法是仔细阅读芯片的数据手册,以确定正确的引脚功能和配置设置。
3.时钟配置错误:STM32微控制器依赖于准确的时钟源以确保正常运行。
新手可能会忽视时钟配置,导致系统无法启动或无法正常工作。
解决这个问题的方法是仔细配置时钟源,并确保时钟频率与所需的系统时钟频率相匹配。
4.软件驱动错误:在使用STM32微控制器进行开发时,需要正确的软件驱动程序来控制硬件功能。
新手可能会遗漏或错误地使用关键的驱动程序,导致无法实现预期的功能。
解决这个问题的方法是仔细阅读相关的软件库文档,并确保正确使用所有必需的软件驱动程序。
5.中断配置错误:STM32微控制器支持多种中断,并需要正确配置以实现正确的中断处理。
新手可能会忽略或错误地配置中断,导致系统无法正确响应中断事件。
解决这个问题的方法是仔细阅读关于中断配置和处理的文档,并确保正确配置所有中断。
6.电源和电源管理问题:STM32微控制器需要稳定和适当的电源供应以确保正常运行。
新手可能会遇到电源不稳定或不足的问题,导致系统无法正常工作。
解决这个问题的方法是确保提供稳定的电源,并使用适当的电源管理技术,例如使用电容和稳压器等来提供稳定和适当的电源。
7.调试问题:在使用STM32微控制器进行开发时,调试是非常重要的。
新手可能会遇到调试问题,例如无法正确读取或显示调试信息。
STM32学习笔记:读写内部Flash(介绍+附代码)
![STM32学习笔记:读写内部Flash(介绍+附代码)](https://img.taocdn.com/s3/m/451daff79a89680203d8ce2f0066f5335a8167c4.png)
STM32学习笔记:读写内部Flash(介绍+附代码)⼀、介绍⾸先我们需要了解⼀个内存映射:stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯⽚实际的flash⼤⼩,不同的芯⽚flash⼤⼩不同。
RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯⽚的RAM⼤⼩。
不同的芯⽚RAM也不同。
Flash中的内容⼀般⽤来存储代码和⼀些定义为const的数据,断电不丢失,RAM可以理解为内存,⽤来存储代码运⾏时的数据,变量等等。
掉电数据丢失。
STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。
stm32的外设地址从0x4000 0000开始,可以看到在库⽂件中,是通过基于0x4000 0000地址的偏移量来操作寄存器以及外设的。
⼀般情况下,程序⽂件是从 0x0800 0000 地址写⼊,这个是STM32开始执⾏的地⽅,0x0800 0004是STM32的中断向量表的起始地址。
在使⽤keil进⾏编写程序时,其编程地址的设置⼀般是这样的:程序的写⼊地址从0x08000000(数好零的个数)开始的,其⼤⼩为0x80000也就是512K的空间,换句话说就是告诉编译器flash的空间是从0x08000000-0x08080000,RAM的地址从0x20000000开始,⼤⼩为0x10000也就是64K的RAM。
这与STM32的内存地址映射关系是对应的。
M3复位后,从0x08000004取出复位中断的地址,并且跳转到复位中断程序,中断执⾏完之后会跳到我们的main函数,main函数⾥边⼀般是⼀个死循环,进去后就不会再退出,当有中断发⽣的时候,M3将PC指针强制跳转回中断向量表,然后根据中断源进⼊对应的中断函数,执⾏完中断函数之后,再次返回main函数中。
⼤致的流程就是这样。
1.1、内部Flash的构成:STM32F429 的内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及⼤⼩如下:STM32F103的中容量内部 FLASH 包含主存储器、系统存储器、 OTP 区域以及选项字节区域,它们的地址分布及⼤⼩如下:注意STM32F105VC的是有64K或128页x2K=256k字节的内置闪存存储器,⽤于存放程序和数据。
STM32-参考手册-中文.pdf
![STM32-参考手册-中文.pdf](https://img.taocdn.com/s3/m/636707d10d22590102020740be1e650e52eacf2b.png)
STM32-参考⼿册-中⽂.pdf23 串⾏外设接⼝(SPI)⼩容量产品是指闪存存储器容量在16K ⾄32K 字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。
中容量产品是指闪存存储器容量在64K⾄128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。
⼤容量产品是指闪存存储器容量在256K⾄512K字节之间的STM32F101xx和STM32F103xx微控制器。
互联型产品是指STM32F105xx和STM32F107xx微控制器。
除⾮特别说明,本章描述的模块适⽤于整个STM32F10xxx微控制器系列。
23.1 SPI简介在⼤容量产品和互联型产品上,SPI接⼝可以配置为⽀持SPI协议或者⽀持I2S⾳频协议。
SPI接⼝默认⼯作在SPI⽅式,可以通过软件把功能从SPI模式切换到I2S模式。
在⼩容量和中容量产品上,不⽀持I2S⾳频协议。
串⾏外设接⼝(SPI)允许芯⽚与外部设备以半/全双⼯、同步、串⾏⽅式通信。
此接⼝可以被配置成主模式,并为外部从设备提供通信时钟(SCK)。
接⼝还能以多主配置⽅式⼯作。
它可⽤于多种⽤途,包括使⽤⼀条双向数据线的双线单⼯同步传输,还可使⽤CRC校验的可靠通信。
I2S也是⼀种3引脚的同步串⾏接⼝通讯协议。
它⽀持四种⾳频标准,包括飞利浦I2S标准,MSB 和LSB对齐标准,以及PCM标准。
它在半双⼯通讯中,可以⼯作在主和从2种模式下。
当它作为主设备时,通过接⼝向外部的从设备提供时钟信号。
警告:由于 SPI3/I2S3 的部分引脚与 JTAG 引脚共享 (SPI3_NSS/I2S3_WS 与 JTDI ,SPI3_SCK/I2S3_CK与JTDO),因此这些引脚不受IO控制器控制,他们(在每次复位后)被默认保留为JTAG⽤途。
如果⽤户想把引脚配置给SPI3/I2S3,必须(在调试时)关闭JTAG并切换⾄SWD接⼝,或者(在标准应⽤时)同时关闭JTAG和SWD接⼝。
stm32入门说明
![stm32入门说明](https://img.taocdn.com/s3/m/5f10ea4e2b160b4e767fcf56.png)
下载好的文件一般是个压缩包, 我们把它解压一下默认的文件名就可以了, 我现在使用的是 v3.1.2 的库,解压后的文件名 STM32F10x_StdPeriph_Lib_V3.1.2,打开解压后的文件可以看到 如下的内容
Libraries 是系统的库,不需要我们修改。project 是工程的一些东西,里面是些例程和模板。 Utilities 是 st 的开发板的一些东西。我们主要关注 project 里面的内容。Project 如下
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef; 其中的 GPIOSpeed_TypeDef, GPIOMode_TypeDef 可以查看库中的 GPIO.h 文件中的详细定义 这里就不介绍。 看下 st 给出的库提供了哪些操作端口的函数吧: 这些函数的详细信息可以参考 st 的库说明,最好去看一下函数的原型代码,这样会有更好 的理解。当然了,我在具体使用的时候也会做一般的说明。 void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_AFIODeInit(void); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); void GPIO_EventOutputCmd(FunctionalState NewState); void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface); 介绍到这里, 对通用的 I/O 端口有个大概的了解了吧, 下面我们通过例子来详细的说明一下。 说到这里,是该介绍一下如何使用 MDK4.0 开始一个新的工程,这里我们使用最新的库进行 配置操作。 去下载新的库,如何下载大家 google 吧,一般 st 的网站上都有的,这里就略过了。
STM32_深入浅出(新手必看)
![STM32_深入浅出(新手必看)](https://img.taocdn.com/s3/m/17705762b307e87101f6967c.png)
STM32学前班教程之一:为什么是它经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。
想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。
就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。
其中涉及产品一律隐去来源和品牌,以防广告之嫌。
全部汉字内容为个人笔记。
所有相关参考资料也全部列出。
:lol教程会分几篇,因为太长啦。
今天先来说说为什么是它——我选择STM32的原因。
我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。
里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。
不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。
下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和1.9V的电源让人很头疼。
后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的AVR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。
正好2148我还没上手,就直接转了这款STM32F103。
与2811相比较(核心1.8V供电情况下),135MHz×1MIPS。
现在用STM32F103,72MHz×1.25MIPS,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。
STM32入门
![STM32入门](https://img.taocdn.com/s3/m/f182f72a905f804d2b160b4e767f5acfa1c78312.png)
STM32入门STM32入门目录第一章笔者的入门总结1.1为什么要把时间花在“犹豫”上?1.2看资料需要计划、耐心和速度1.3学STM32必备开发板1.4熟悉开发板并试图写程序第二章STM32入门方法谈2.1拿到开发板我该做什么?2.2我的时间如何安排2.3碰到问题怎么办?第三章STM32学习步骤3.1关于STM32文档学习3.2 30天上手STM32计划3.2.1第1步:熟悉调试软件3.2.2第2步:GPIO编程3.2.3开始全新的STM32深入研究STM32入门第一章笔者的入门总结1.1为什么要把时间花在“犹豫”上?每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。
我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。
大家可能是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。
严格地说,应该是模仿实验。
熟悉之后才会自己写程序代码实现某个功能。
因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;那么,从现在开始,不要犹豫了,不要想再详细地了解STM32的前景了。
做一个可能影响你一生的决定吧!不用咨询,不用兴奋,开始看书籍(文档)吧!!每个人都是这么走过来的。
1.2看资料需要计划、耐心和速度这里所谓的“资料”包括STM32书籍、文档。
因为STM32有个特点,datasheet很多都是中文的,有些同学就没有去买书籍,直接看STM32的用户手册,也是可以的。
但是不管看书籍还是文档,我们是需要计划的。
不是今天看3页,明天看5页。
一本书看了两个月,还在磨蹭。
请记住,你学的不是寂寞,是STM32!看书或文档不是用来消遣时间的。
STM32入门教程--新建工程详细过程
![STM32入门教程--新建工程详细过程](https://img.taocdn.com/s3/m/f7241309f02d2af90242a8956bec0975f465a4b3.png)
KEIL5新建工程和开发环境配置STM32三种开发方式,基于寄存器开发,基于官网固件库开发,基于HAL库(即STM32cube编程软件)本文以STM32F107为例,基于官方固件库开发,介绍MDK keil5新建工程的详细过程和keil开发环境的配置。
一、下载STM32官方库登录ST官网点击要下载的芯片型号:注意:下载需要注册登录,或是输入邮箱验证:登录自己的邮箱点击下载:下载解压后:二、新建工程前准备工作新建工程文件夹:1、新建工程文件夹,并在里面新建四个子文件夹,CMSIS(存放内核函数及启动引导文件),STLIB(存放库函数),User(存放用户自己的函数),Output(存放输出文件)如图。
将下载的标准库中STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport和STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的文件都复制到CMSIS文件夹中STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver中的 inc src 复制到STLIB文件夹中STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template中的这几个文件复制到User文件夹中三、打开keil5 新建工程1、 Project—New uVision Project新建工程并保存到新建的文件夹2、选型对应的芯片型号(这里使用的芯片是STM32F107VCT6)3、点击OK确定后会弹出窗口(引导窗口,已下载了库的可跳过这一步),点击关闭4、打开Manage Project 窗口,修改工程名,添加工程文件夹和文件依次添加CMSIS、User、STLIB、STARTUP,并对应文件夹下的文件添加进来。
STM32中C语言知识点初学者必看
![STM32中C语言知识点初学者必看](https://img.taocdn.com/s3/m/9f83dd526d175f0e7cd184254b35eefdc8d31500.png)
STM32中C语言知识点初学者必看1.基本数据类型:学习C语言的基本数据类型,如整型、浮点型、字符型、布尔型等。
了解它们在STM32中的表示方式和存储要求。
2. 控制语句:学习C语言的控制语句,如条件判断语句(if-else语句)、循环语句(for循环、while循环)和跳转语句(break、continue、return)。
了解它们在STM32中的应用场景和注意事项。
3.数组和指针:掌握C语言中的数组和指针的概念和使用方法。
了解如何在STM32中使用数组和指针进行数据存储和访问,以及如何进行数组和指针的参数传递。
4.函数:学习C语言函数的定义和调用方式。
了解如何在STM32中编写和调用函数,并掌握函数参数传递和返回值的使用方法。
5.结构体和联合体:了解C语言中结构体和联合体的定义和使用方法。
掌握在STM32中创建和使用结构体和联合体的技巧。
6.文件操作:学习如何在STM32中进行文件操作,如打开、读取和写入文件。
了解如何操作存储器设备(如SD卡)来读写文件。
7.中断:了解STM32中的中断机制和中断处理函数的编写方法。
学习如何配置和处理外部中断、定时器中断和串口中断等。
8.串口通信:学习如何在STM32中进行串口通信。
掌握如何配置和使用串口设备,并使用串口进行数据的发送和接收。
9.GPIO操作:了解STM32中的GPIO引脚配置和操作方法。
掌握如何配置和操作GPIO引脚以实现输入和输出功能。
10.PWM输出:学习如何使用STM32的定时器来实现PWM输出。
了解如何配置定时器和通道以产生PWM信号,并掌握调节占空比和频率的方法。
11.RTC实时时钟:了解STM32中的实时时钟模块(RTC)的配置和使用方法。
学习如何设置和读取当前时间,并使用RTC进行定时操作。
12.ADC模数转换:学习如何使用STM32的模数转换模块(ADC)来进行模拟信号的转换。
掌握如何配置ADC和通道,以及如何读取和处理模拟输入信号。
STM32Cube函数包快速入门指南说明书
![STM32Cube函数包快速入门指南说明书](https://img.taocdn.com/s3/m/02e783a9afaad1f34693daef5ef7ba0d4a736d2d.png)
Quick Start GuideSTM32Cube function pack for IoT node with dynamic NFC tag, environmental and motion sensors(FP-SNS-SMARTAG1)Version 1.5 (July 12, 2021)Agenda 1Hardware and Software overview2Setup & Demo Examples3Documents & Related Resources4STM32 Open Development Environment: Overview21-Hardware and Software overviewNFC Dynamic Tag sensor node evaluation board (STEVAL-SMARTAG1)Hardware OverviewSTEVAL-SMARTAG1 Hardware Description•STEVAL-SMARTAG1 is a flexible NFC Tracker evaluation board with sensors includes a comprehensive software libraryand a sample application to monitor and log sensor data over NFC from an Android or iOS device. Ultra-low powersensor node evaluation board mounts an ST25DV NFC Tag, an STM32L0 ARM Cortex M0+, environment sensors(temperature, humidity and pressure) and motion (accelerometer) sensor.•The evaluation board features NFC harvesting to supply power and a battery cradle for a CR2032 battery.Key Product on board•ST25DV64K dynamic NFC tag solution based on 64K-bit (8K-Byte) EEPROM and with I²C interface, Fast Transfer Mode andEnergy Harvesting features•STM32L031K6 ultra-low-power ARM Cortex-M0+ MCU running at 32 MHz with 32-Kbytes Flash and 8-Kbytes RAM•LIS2DW12 ultra-low-power high-performance three-axis linear accelerometer•LPS22HB ultra-compact piezo-resistive absolute pressure sensor which functions as a digital output barometer: 260-1260 hPa•HTS221 capacitive digital sensor for relative humidity and temperature•STLQ015 low drop linear regulator power management•CR2032 Battery powered (not included)Latest info available at STEVAL-SMARTAG1FP-SNS-SMARTAG1Software Overview5Software Description•FP-SNS-SMARTAG1is an STM32Cube function pack which allows you to read the motion and environmental sensor data on your IoT node via an NFC enabled reader such as a mobile phone or a tablet.The package supports energy harvesting (enabled by NFC)and battery-operated use cases.•This software,together with the suggested combination of STM32and ST devices can be used,for example,to develop tracking,cold chain,medical,smart sensing,and smart home,city and building applications.•The software runs on an ultra-low power STM32L0microcontroller and includes Product summary drivers for the Dynamic NFC tag and for the motion and environmental sensors.•You can register the NFC Sensor Tag node on the DSH-ASSETRACKING web application for asset tracking that stores and monitors on-board sensor data as well as the geolocalization of the smartphone used to read the IoT node data.Key features•Complete firmware to access data from an IoT node with dynamic NFC tag,environmental and motion sensors•Ultra-low power operations,with support of both energy harvesting and battery-operated use cases•Compatible,in single-shot mode only,with the ST NFC Sensor application for Android/iOS,to read and display sensor data•Compatible with the ST Asset Tracking application for Android/iOS for reading data logs from the NFC tag and for sending them to the DSH-ASSETRACKING cloud-based dashboard•Sample implementation available for the STEVAL-SMARTAG1evaluation board •Easy portability across different MCU families thanks to STM32Cube •Free user-friendly license termOverall Software ArchitectureLatest info available at FP-IND-SMARTAG12-Setup and demo examplesSetup & Demo ExamplesSoftware and Other prerequisites •STSW-LINK009•ST-LINK/V2-1 USB driver•STSW-LINK007•ST-LINK/V2-1 firmware upgrade•FP-SNS-SMARTAG1•Copy the .zip file content into a folder on your PC. The package will contain source code example (Keil, IAR, STM32CubeIDE) based only on STEVAL-SMARTAG1•ST Asset Tracking and ST NFC Sensor (for single-shot mode only) applications forAndroid/iOS available from Google Store / iTunes72.1-Setup Overview: STEVAL-SMARTAG1 evaluation boards9•1x ST NFC SensorTag kit (STEVAL-SMARTAG1)•It includes SWD connector with a 6pin flat•1x Android™or iOS™device with ST Asset Tracking and ST NFC Sensor apps installed •1x PC with Windows 7and above•1x STM32-Nucleo or ST-Link programmer •1x USB type A to Mini-B USB cable for the ST-LinkMini USB ST NFC Dynamic Tag sensor node evaluation board1 –RED (VDD)2 –GREEN (SWCLK)3 –BLACK (GND)4 –YELLOW (SWIO)5 –ORANGE (NRST)6 –BLUE (USART2_TX)6 5 4 3 2 110•In order to program the board you need to connect an external ST-Link to the SWD connector on the cradles with a 6pin flat cable or directly.•The easiest way is to get an STM32-Nucleo board which includes an ST-Link V2.1programmer •Be sure that CN2Jumpers are OFF and connect your STM32Nucleo board to the ST NFC SensorTag through the provided cable paying attention to the polarity of the connectors.Pin 1can be identified by a little circle on the PCB silkscreen (STM32Nucleo and ST NFC SensorTag board).CN2Remove JumpersSWD (Pin1)SWD connections with 6-pin flat cableNOTEThe battery must be present in order to use the ST-Link features (programming, debugging and serial communication)Android™/iOS™ smartphone with ST Asset Tracking and ST NFC Sensor applicationsStart coding in just a few minutes123456Select Function Pack:FP-SNS-SMARTAG1/stm32odeUse the pre-compiled binaries for registering your device, or alternative re-compile the code adding your device certificateDownload & unpackFP-SNS-SMARTAG1 package structureDocsBSP , HAL and driversApplication example for Nucleo and STEVAL. \Projects\STM32L031K6-SmarTag1\Examples\SmarTag1Using serial line monitor –e.g.Tera Term FP-SNS-SMARTAG1 for STEVAL-SMARTAG1•After the RESET you couldsee the initialization phase•After autostart the sensordata are logged•These messages are writtenwhen getting(before)andremoving(after)thesmartphone from the NFCtag.In particular,the newconfig is written if a new oneit is set.After the sensordata are logged(Sync andAsync events).Serial line monitor for STEVAL-SMARTAG1 boardNOTEFor having the UART functionality on to STEVAL-SMARTAG1 board, it is necessary:-To recompile the code uncommenting the line//#define SMARTAG_ENABLE_PRINTFon file: Projects\STM32L031K6-SmarTag1\Examples\SmarTag1\Inc\SMARTAG1_config.h -To connect the BLUE (USART2_TX) cable to the RX pin on the STM32 Nucleo boardConfigure the serial line monitor (speed, LF)2.3-Demo Examples: ST Asset Tracking Application Overview•Settings :it is open when getting the smartphone near the NFC tag•the data to be logged can be selected (Pressure,Temperature,Humidity and Vibration)together with the time interval.•In addition to the default mode,there are two different logging mode that can be chosen:•Log only out of range [min,max]and accelerometer events:•the selected data will be logged only if a minimum or maximum threshold value will be matched (sync events).•logging only if a wake up or change of orientation events occurs if enabled (async events)•Force logging of one sample:•the current value of the selected data will be logged,after that the data logging re-starts with the previousSettingsEnable/Disable the data to be loggedWrites the new settingsEnable/Disable the accelerometer eventsSettings: log only out of range and accelerometer eventsA n d r o i d v e r s i o n•Data:•Sensor Plot:•the plots of the selected data for the logging are shown.•for any plot,when selecting “SHOW DETAILS”the values of the logged data are shown•Events:•if the "Log only out of range"option has been selected,the accelerometer events are shown,in case they have occurred.A n d r o i d v e r s i o nMin/MaxData: Events Data: Sensor plot Data: Sensor plot details2.3-Demo Examples: ST NFC Sensor Application OverviewDemo ExamplesST NFC Sensor Application for Android/iOS•Single Shot (only in case the battery is not inserted):•the current values of the data are read in energy harvesting mode from the tag and then displayed •with the single shot setting the energy harvesting time can be changedReading Single Shot Data Single Shot DataSingle Shot SettingsA n d r o i d v e r s i o n2.4-Demo Examples: Using the Asset Tracking Web Dashboard•Visit the home page of the DSH-ASSETRACKING dashboard on ST site for information and web dashboard URL (Link), or go Go to DSH-ASSETRACKING dashboard URL at https:///#/homeDemo ExamplesUsing the Asset Tracking Web Dashboard (1/6)D S H -A S SE T R A C K I N G•Provide your username and password:•Select login and click GO buttonDemo ExamplesUsing the Asset Tracking Web Dashboard (2/6)D S H -A S SE T R A C K I N G•Adding new the device:•Select the device you want to monitor :•Selecting telemetry:•Select the device youwant to monitor.•Select desired telemetrydata to display•Choose the amount ofdata to display•Select Play ButtonHumidity data displayed•Register device from ST Asset Tracking Application and upload the data on cloud:3-Documents & Related ResourcesDocuments and related resources (1/2)FP-SNS-SMARTAG1•DB3553:STM32Cube function pack for IoT node with dynamic NFC tag,environmental and motion sensors for STM32Cube–data brief•UM2389:Getting started with the FP-SNS-SMARTAG1dynamic NFC tag,environmental and motion sensors for STM32Cube–user manual•Software setup fileSTEVAL-SMARTAG1•Gerber files,BOM,Schematic•DB3533:NFC Dynamic Tag sensor node evaluation board–data briefDSH-ASSETRACKING•DB4207:Cloud Amazon-based web application for asset tracking–data briefSTNFCSensor•DB3666:NFC Sensor TAG mobile application–data briefSTAssetTracking•DB3951:ST Asset Tracking app to configure a Sigfox node based on the FP-ATR-SIGFOX1function pack3.0–data brief4-STM32 Open Development Environment: OverviewSTM32 Open Development Environment Fast, affordable Prototyping and Development•The STM32Open Development Environment (STM32ODE)is an open,flexible,easy,and affordable way to develop innovative devices and applications based on the STM3232-bit microcontroller family combined with other state-of-the-art ST components connected via expansion boards.It enables fast prototyping with leading-edge components that can quickly be transformed into final designsFor further information, please visit /stm32odeFunction Packs(FP)STM32Cubedevelopment softwareSTM32 Nucleo expansion boards (X-NUCLEO)STM32 Nucleo development boardsSTM32Cube expansion software(X-CUBE)© STMicroelectronics -All rights reserved.。
STM32知识
![STM32知识](https://img.taocdn.com/s3/m/ef6ee735c850ad02df80414a.png)
STM32知识1、 SYSCLK时钟源有三个来源:HSI RC、HSE OSC、PLL2、 MCO[2:0]可以提供4源不同的时钟同步信号,PA83、 GPIO口有两个反向串联的二极管用作钳位二极管。
4、 ICode总线,DCode总线、系统总线、DMA总线、总线矩阵、AHB/APB桥5、在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟6、 STM32复位有三种:系统复位、上电复位、备份区域复位。
其中系统复位除了RCC_CSR中的复位标志和BKP中的数值不复位之外,其他的所有寄存器全部复位。
触发方式例如外部复位、看门狗复位、软件复位等;电源复位由于外部电源的上电/掉电复位或者待机模式返回。
复位除了BKP中的寄存器值不动,其他全部复位;备份区域复位的触发源为软件复位或者VDD和VBAT全部掉电时。
7、 (NestedVectored Interrupt Controller)NVIC嵌套向量中断控制器,分为两种:抢先式优先级(可嵌套)和中断优先级(副优先级,不能嵌套)。
两种优先级由4位二进制位决定。
分配下来有十六种情况:8、自动装载寄存器和影子寄存器:前者相当于51当中的溢出设定数值。
而影子寄存器顾名思义是影子,就是寄存器的另一分copy。
实际起作用的是影子寄存器,而程序员操纵的则是自动装载寄存器。
如果APPE位使能,表明自动装载寄存器的值在下一次更新事件发生后才写入新值。
否则,写入自动装载寄存器的值会被立即更新到影子寄存器。
9、计数器的数值与输出比较器相等时,翻转输出信号10、ARM公司只生产内核标准,不生产芯片。
ST、TI这样的公司从ARM公司那里购买内核,然后外加自己的总线结构、外设、存储器、时钟和复位、I/O后就组成了自己的芯片。
中,TPAD可以用一块覆铜区域来替代,通过电容的充放电常数来确定是否按下。
屏幕的对应表PAGE2单独列出来:13、USART可以操纵SPI设备。
初学STM32CubeIDE
![初学STM32CubeIDE](https://img.taocdn.com/s3/m/c8f93bb7bceb19e8b8f6ba65.png)
初学STM32CubeIDE一、关于安装安装已经有好多人说过了,我就不重复。
二、认识界面初初打开软件,自动打开“Information Center”就是信息中心。
我们点击“Read STM32CubeIDE Documentation”,再点击“STM32CubeIDE Qiuck Start Guide”就是快速启动手册。
简单介绍一下。
Note: workspace and project names must contain only ascii characters. This is also valid for the path to the workspace.注意:项目要用ascii字节。
工作空间名也要用ascii字节。
工作空间就是一个文件夹,用于作为STM32CubeIDE的存放暂时文件和记录文件的地方。
三、建工程工程不用建在工作空间中。
我喜欢各软件的工程集中放一起,再区分一个个软件专用的工程文件夹。
菜单“File”-“New”-“STM32 Project”或者“Start new STM32 project”链接,则启动新建工程。
工程的第一步:选择芯片,可以通过左则输入型号,快速选出;或者通过下拉框的过滤,最后选定型号。
工程的第二步:项目的名字,还的选项。
名字不要用中文,要用ascii。
选项默认就可以,用C语言,输入单片机程序。
工程的第三步:这里我也看不明白,点“Finish”(完成)就好了。
建工程前和后比较卡,这是在下载。
四、设定时基看看电路图,我发现晶振两块,一块是8MHz,另一块是32.768KHz。
那么对应高速时钟是来自晶振8MHz。
低速时钟是来自晶振32.768KHz。
那么我点开“System Core”,选中“RCC”。
对应HSE下拉选“Crystal/Ceramic Resonator”这是晶振的意思。
“BYPASS Clock Source”意思是指线输入路时钟源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言一天入门STM32,仅一天的时间,是否有真的这么快。
不同的人对入门的理解不一样,这篇一天入门STM32的教程,我们先对入门达成一个共识,如果你有异议,一天入门不了,请不要较真,不要骂街,保持一个工程师该有的修养,默默潜心学习,因为你还有很大的上升空间。
我眼中的入门:(前提是你学过51单片机和C语言)1、知道参考官方的什么资料来学习,而不是陷入一大堆资料中无从下手。
2、知道如何参考官方的手册和官方的代码来独立写自己的程序,而不是一味的看到人家写的代码就觉得人家很牛逼。
3、消除对STM32的恐惧,消除对库开发的恐惧,学习是一个快乐而富有成就感的过程。
第1章一天入门STM32本章参考资料:《STM32中文参考手册》《CM3权威指南CnR2》学习本章时,配合《STM32中文参考手册》GPIO章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。
1.151与STM32简介51是嵌入式学习中一款入门级的精典MCU,因其结构简单,易于教学,且可以通过串口编程而不需要额外的仿真器,所以在教学时被大量采用,至今很多大学在嵌入式教学中用的还是51。
51诞生于70年代,属于传统的8位单片机,如今,久经岁月的洗礼,既有其辉煌又有其不足。
现在的市场产品竞争激烈,对成本极其敏感,相应地对MCU的要求也更苛刻:功能更多,功耗更低,易用界面和多任务。
面对这些要求,51现有的资源就显得得抓襟见肘了。
所以无论是高校教学还是市场需求,都急需一款新的MCU来为这个领域注入新的活力。
基于这市场的需求,ARM公司推出了其全新的基于ARMv7架构的32位Cortex-M3微控制器内核。
紧随其后,ST(意法半导体)公司就推出了基于Cortex-M3内核的MCU—STM32。
STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多Cortex-M3MCU中脱颖而出,成为最闪亮的一颗新星。
STM32一上市就迅速占领了中低端MCU市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。
作为一名合格的嵌入式工程师,面对新出现的技术,我们不是充耳不闻,而是要尽快吻合市场的需要,跟上技术的潮流。
如今STM32的出现就是一种趋势,一种潮流,我们要做的就是搭上这趟快车,让自己的技术更有竞争力。
1.1.151与STM32架构的区别我们先普及一个概念,单片机(即MCU)里面有什么。
一个人最重要的是大脑,身体的各个部分都在大脑的指挥下工作。
MCU跟人体很像,简单来说是由一个最重要的内核加其他外设组成,内核就相当于人的大脑,外设就如人体的各个功能器官。
下面我们来简单介绍下51和STM32的结构。
1.51系统结构51系统结构框图图151系统结构框图我们说的51一般是指51系列的单片机,型号有很多,常见的有STC89C51、AT89S51,其中国内用的最多的是STC89C51/2,下面我们就以STC89C51来讲解,并以51简称。
内核51由一个IP核和片上外设组成,IP核就是上图中的CPU,片上外设就是上图中的:时钟电路、SFR和RAM、ROM、定时/计数器、并行I/O口、串行I/O口、中断系统。
IP 核跟外设之间由系统总线连接,且是8bit的,速度有限。
51内核是上个世纪70年代intel公司设计的,速度只有12M,外设是IC厂商(STC)在内核的基础上添加的,不同的IC厂商会在内核上添加不同的外设,从而设计出各具特色的单片机。
这里intel属于IP核厂商,STC属于IC厂商。
我们后面要讲的STM32也一样,ARM属于IP核厂商,ARM给ST授权,ST公司在Cortex-M3内核的基础上设计出STM32单片机。
外设我们在学习51的时候,关于内核部分接触的比较少,使用的最多的是片上外设,我们在编程的时候操作的也就是这些外设。
编程的时候操作的寄存器位于SFR和RAM这个部分,其中SFR(特殊功能寄存器)占有128字节(实际上只用了26个字节,只有26个寄存器,其他都属于保留区),RAM 占有128字节,我们在程序中定义的变量就是放在RAM中。
其中SFR和RAM在地址上是重合的,都是在80~FF这个地址区间,但在物理区间上是分开的,所以51的RAM是有256个字节。
编写好的程序是烧写到ROM区。
剩下的外设都是我们非常熟悉的IO口,串口、定时器、中断这几个外设。
2.STM32系统结构STM32系统结构框图图2STM32系统结构框图内核在系统结构上,STM32和51都属于单片机,都是由内核和片上外设组成。
只是STM32使用的Cortex-M3内核比51复杂得多,优秀得多,支持的外设也比51多得多,同时总线宽度也上升到32bit,无论速度、功耗、外设都强与51。
从结构框图上看,对比51内核只有一种总线,取指和取数共用。
Cortex-M3内部有若干个总线接口,以使CM3能同时取址和访内(访问内存),它们是:指令存储区总线(两条)、系统总线、私有外设总线。
有两条代码存储区总线负责对代码存储区(即FLASH外设)的访问,分别是I-Code总线和D-Code总线。
I-Code用于取指,D-Code用于查表等操作,它们按最佳执行速度进行优化。
系统总线(System)用于访问内存和外设,覆盖的区域包括SRAM,片上外设,片外RAM,片外扩展设备,以及系统级存储区的部分空间。
私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。
它们也在系统级存储区。
还有一个MDA总线,从字面上看,DMA是data memory access的意思,是一种连接内核和外设的桥梁,它可以访问外设、内存,传输不受CPU的控制,并且是双向通信。
简而言之,这个家伙就是一个速度很快的且不受老大控制的数据搬运工,这个在51里面是没有的。
外设从结构框图上看,STM32比51的外设多得多,51有的串口、定时器、IO口等外设STM32都有。
STM32还多了很多特色外设:如FSMC、SDIO、SPI、I2C等,这些外设按照速度的不同,分别挂载到AHB、APB2、APB1这三条总线上。
3.小结从内核和外设这两大方面来比较,STM32之于51就是一个升级版的单片机。
它适应市场,引流潮流,在中低端的微控制器中流光溢彩。
1.2学习方法的区别学习51用寄存器,学习STM32用库。
以前我们在学习51的时候,用的是寄存器编程的方法,想要实现什么效果,直接往寄存器里面赋值,优点是直观,简单粗暴,知道自己具体干了啥,心里踏实。
直接操作寄存器之所以在51上可行,究其原因,我想有两点:1、51主频不高,资源有限,必须注重程序执行的效率,只能直接操作寄存器。
关键的地方还得用汇编,不适合用固件库。
要知道当初我们学习51单片机的时候用的还是汇编,连现在的C编程都不是,就更别说什么库函数编程。
2、51功能简单,寄存器不多。
以国内普及最广的STC89C52为例,寄存器全部加起来不到30个。
按照功能区分来记的话,可以把每个寄存器背的滚瓜烂熟,并且寄存器每一位的功能都可以记得住,在编程的时候做到了然于胸。
现在从51过度到STM32的学习,很多人还是喜欢沿用51的学习方法。
接受不了库,在学习库的时候陷入迷糊之中,来回几个月下来,都不知道到底有没学会STM32,因为在这一路的学习中都是在调用库函数,压根就没有操作过寄存器,心里面很不踏实。
其实大家在调用库函数的时候心中难道就没有疑问,库的底层是怎么实现的?难道就没有勇气对库的底层一探究竟。
可最后当我们开始跟踪库函数底层的时候,看到一堆的宏定义、结构体、指针、各种的文件包含,而且注释全部都是英文的,是不是又心生忌惮。
鉴于此,我想用两个原因来总结下很多初学者畏惧库不愿意用库的原因。
1、C语言知识点的欠缺库在实现寄存器映像时使用的宏定义,强制类型转换,在定义寄存器时使用的结构体,在外设初始化函数时使用的指针,在组织头文件时使用的条件编译等C语言知识,在大学课程中很少涉及,大多数老师也基本是不讲。
在一些简单的51单片机编程中又很少会用到这些知识。
学单片机,做嵌入式开发其实80%的工作都跟C语言编程相关,剩下的20%的工作就是阅读各种数据手册,熟悉各种硬件外设。
所以掌握这些基本的C语言知识,是嵌入式学习中一道迈不过去的坎,STM32的库则给了我们一次提升C的机会。
凡是可以从书本中找到的,相信我们基本都可以学会,很多初学者并不是不够聪明或者勤奋,只是缺少方向性的指导罢了。
对于这欠缺的知识点我们稍微花点时间就可以掌握,剩下的就是不断地实践调试。
这里我为大家推荐一本C语言的书籍《C和指针》。
2、程序架构设计思想的欠缺这个比较难搞,很多C语言学习得挺好好的人,也比较难掌握。
还好我们遇到了STM32的库,这给了我们一个学习和提升C语言绝佳的机会。
库的整个架构是如何搭建起来的,代码上是如何如何一步一步写出来的:从寄存器映像开始,到寄存器的封装,然后到函数的编写,到每个外设函数对应的驱动文件,这里面涉及到了大量的条件编译,文件包含的思想,对应刚写过几行51单片机的初学者来说简直就是噩梦。
但是,如果你把这一系列的关系弄明白了,那么对库的整个架构也了解的差不多了,以后你就不用嚷嚷着说要操作寄存器了。
如果你一开始不喜欢用库,对库开发很忌惮,那么请自问:是不是我的C语学得不够好。
库是一种全新的学习方法,是一种潮流,我更把它看做是与C语言的又一次历练和提升。
是否用库,只差你一个闪亮的回眸。
1.3用寄存器点亮LED为了顺利过渡到库开发,在STM32编程的开始,我们对照51点亮一个LED的方法,给大家演示一下STM32如何用操作寄存器的方法点亮一个LED,然后再慢慢讲解到底什么是库,让大家知道库跟寄存器的关系。
1.3.1用51点亮一个LED在用STM32点亮一个LED之前,我们先来复习下用51如何点亮一个LED。
硬件上我们假设51单片机的P0口的第0位接了一个LED,负逻辑亮。
如果我们要点亮这个LED,代码上我们会这么写:1P0=0XFE;//总线操作点亮LED这时候我们就把LED点亮了,如果要关掉LED,则是:1P0=0XFF;//总线操作关闭LED这里面我们用的是总线操作的方法,即是对P0口的8个IO同时操作,但起作用的只是P0^0。
除了这种总线操作的方法,我们还学习过位操作,利用51编译器的关键字sbit,我们可以定义一个位变量:1sbit LED=P0^0;那么LED=0;就点亮了LED,LED=1;就关闭了LED。
为了让程序看起来见名知义,我们定义两个宏:1#define ON02#define OFF1点亮和关闭LED的代码就变成了:1LED=ON;//位操作点亮LED2LED=OFF;//位操作关闭LED稍微整理下代码,整体的效果就是:1//假设51单片机的P0^0口接LED,负逻辑点亮23#define ON04#define OFF156sbit LED=P0^0;78void main(void)9{10P0=0XFE;//总线操作点亮LED11P0=0XFF;//总线操作关闭LED1213LED=ON;//位操作点亮LED14LED=OFF;//位操作关闭LED15}上面总线和位操作的的方法,学过51的朋友是非常熟悉的,也很容易理解。