视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
STM32学习笔记小结
2025-10-03 14:37:18 责编:小OO
文档
STM32学习笔记

一、入门

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,主要包括STM32F101“基本型”系列、STM32F103“增强型”系列、STM32F105、STM32F107“互联型”系列。STM32微控制器满足嵌入式开发低功耗和高性能的要求,并且拥有简单易上手的固件函数库,避免了传统ARM单片机开发操作寄存器的模式,所以十分受欢迎,应用广泛。

作者只学过一些51单片机的基础,就直接上手STM32,边学边用。该篇笔记也是随意的记录一下,要想系统的学习一下,个人认为资料手册(data sheet)、参考手册(Reference Manual)和用户手册(固件函数库)三个文档再有开发板实际操作,完全足够。熟练掌握以上内容,触类旁通,成为STM32开发的高手指日可待。

目标->实战项目

 

STM32学习方法

开发环境(MDK/IAR) 寄存器or固件库 软件仿真&开发板硬件 学习难度

建立不受库版本的工程项目:

1.准备好文件  (Startup Code、Lib、User)

2.建立工程  不添加Startup Code

3.工程管理  添加需要的库文件、自定义文件

4.编译链接

ARM简介

ARM7衍生出全新的Cortex架构,三管齐下:

Cortex-A:高性能应用处理器。(越来越接近电脑)

Cortex-R:专门针对实时、深度嵌入式的解决方案。(又快又实时)

Cortex-M:专注低成本嵌入式微控制器。(好用又便宜)

Cortex-M中低端的芯片

Cortex-M0:针对FPGA应用  Cortex-M1:替代低成本MCU  Cortex-M3:占领高性能MCU市场

Cortex-M3特点:高性能(哈佛结构+分支预测)、高集成度(单芯片)、高代码密度(Thumb2指令集)、内嵌NVIC中断(响应速度快)、低成本(最便宜的不到1美元)。

Cortex-M3处理器产品:STM32系列(瑞士 意法半导体ST)、Stellaris 系列(美TI)、LPC1000系列(荷兰NXP)、AT91SAM3系列(美Atmel)

STM32103VCT6引脚:

80*GPIO或(外设)引脚复用 电源相关、复位、晶振)

ATmega128是Atmel公司的8位系列单片机的最高配置的一款单片机。

ARM流水线 指令处理:

二、外设功能模块

STM32库函数

库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的接口。

灵活使用、驾轻就熟。

GPIO原理与工作模式

1.设置GPIO引脚的工作模式

2.引脚位运算: 寄存器BSRR/BRR 

位绑定:位n 映射到 内存地址a  if  a=0x01 低地址为1 则n =1 

运算高效(替代读-修改-写)

可绑定区域   SRAM 0空间

位绑定公式:    AliasAddr = 0x2200 0000 +((A-0x2000 0000)*8 +n)*4          n=(0 ~ 31)

 – 0x2000 0000)*32 + 4*n 

 片上外设

位绑定公式:

 – 0x4000 0000)*32 + 4*n 

位绑定操作:

位绑定公式:

位绑定编程:#define BitBand(Addr,BitNum) *((volatile unsigned long *)((Addr&0xF0000000)+0x2000000+((Addr&0xfffff)<<5)+(BitNum<<2)))

串行通信

74LS1芯片实现串转并的功能:18  仿真通信、逻辑分析仪

异步串行通信:

协议内容:1起始位 2数据位(8、9奇偶校验) 3停止位 (1、1.5、2周期)4波特率设置

串行异步收发转RS232(高电平),最远传输十几米。 RS485最远3000米,最大速率1Mbps,噪声干扰好。

数据发送过程:1、CR1使能UE位。 2、定义字长M 3。3、CR2设置编程停止位STOP。*4、配置DMA寄存器(多缓冲)5、CR1发送使能TE。6、BRR寄存器设置波特率。7、写数据到DR寄存器。

数据接收过程类似。

串口编程:

1、打开时钟RCC,引脚设置:Rx浮空输入 Tx 推挽输出 2、将USART3的RX、TX重映射到PC10、PC11 ,USART3配置。3、USART_SendData( USART3 , 0xf0);

硬件下载与调试

1、STM32芯片的内部存储结构  2、FLASH下载与调试设置  3、RAM下载与调试设置

FLASH调试(0x0800 0000)只能烧写1000次。 RAM调试(0x2000 0000)

芯片唯一UID地址:0x1FFF F7E8 – 0x1FFF F7F4   96bit/8 = 12 Byte

ID_num[i] = *(u8 *) ( 0x1FFF 7E9 + i) i->12

Printf(“%x” , ID_num[i]);

Cortex-M3复用功能(AF)和重映射功能

复用功能配置(AFIO_MAPR 复用重映射和调试I/O配置寄存器)

GPIO_PinRemapConfig(选择重映射的管脚 , 重映射的新状态)

重映射优点:1、改善硬件设计 2、额外增加资源

UART-Printf重新定向

Int fputc(int ch , FILE *f)

{

//ch送到串口

USART_SendData(USART1 , ch);

//等待发送完毕

While(USART_GetFlagStatus( USART1 , USART_FLAG_TC) == RESET );

//返回ch

Return(ch);

}

Systick的使用

1、延时 2、心跳 传统的延时(空等待)for( i=0; iSystick最高为HCLK/8。内部是24位递减计数器即16M计数,Systick最高频率9M,即最慢产生16M/9M = 约1.8s中断。

SysTick_CounterCmd( )使能SysTick计数器。 使能SysTick中断。

SysTick_CLKSourceConfig( )时钟源设置。 设置重装载值。

通用定时器

1、TIM1和TIM8是能产生3对PWM互补输出的高级定时器,常用于电机的驱动,时钟由APB2产生。

2、其他6个为普通定时器,时钟由APB1产生。

Timer作用:1、定时功能 2、计数功能 3、输入捕获 4、匹配输出 5、PWM脉冲波

原理5部分:1、时钟源 2、时基部分 3、输入 4、输出 5、寄存器部分

定时器配置

1、开启时钟RCC_APB1PeriphClockCmd( )。

2、利用TIM_DeInit( )函数将Timer设置成默认缺省值。

3、TIM_InternalClockConfig( )选择TIMx来设置内部时钟源。

4、TIM_Prescaler()设置预分频系数。

5、TIM_ClockDivision()来设置时钟分割。

6、TIM_CounterMode()来设置计数器模式。

7、TIM_Period() 来设置自动装入的值。

8、TIM_ARPPreloadConfig() 来设置是否使用预装载缓冲器。

9、TIM_ITConfig() 来开启TIMx的中断。

SPI与数码管

74HC595芯片:串转并

当SCLR为低电平时,输出端Q清零。

当SCLR为1,SCK出现上升沿时,内部寄存器移位并接受SER端发出来的数据。

当RCK出现上升沿时,74HC595内部寄存器的数据输出到QA—QH端。

SPI串行接口

SPI是Motorola公司提出的一种同步串行外围接口。在低速、低功耗、需保存少量参数的智能化传感系统中得到了广泛应用。

主要信号:1、MOSI  2、MISO  3、SCK串行时钟  4、SS从机选择信号,低电平有效。

SPI主模式通信设置步骤:

1、通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率。

2、选择CPOL和CPHA位,定义数据传输和串行时钟的相位关系。

3、设置DFF位来定义8位或16位数据帧格式。

4、配置SPI_CR1寄存器的的LSBFIRST位定义帧格式。

5、如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输期间应把NSS引脚连接到高电平;在软件模式中,需设置SPI_CR1寄存器的SSM和SSI位,如果NSS引脚工作在输出模式,则只需设置SSOE位。

6、必须设置MSTR和SPE位(只当NSS连接到高电平,这些位才能保持置位)。

在这个配置中,MOSI引脚是数据输出,MISO引脚是数据输入。 

I2C通信

I2C bus是Philips公司推出的一种基于两线的芯片间串行传输总线。采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件具有了最简单而灵活的拓展方法。

特点:1、二线传输  2、无中心主机  3、软件寻址  4、应答式数据传输过程 5、节点可带电接入或撤出

*在I2C总线上只需串行数据SDA线和串行时钟SCL线两条线。

I2C配置

1、开启端口、模块(IIC)时钟

2、相应引脚初始化(开漏输出)/*重映射配置

3、I2C配置 I2C_Init()

4、发送过程

1)发送起始信号,while等待起始信号发送事件并清除。

2)发送器件地址,while等待发送结束

3)发送器件内部写入地址,while等待移位寄存器空

4)发送数据,while等待发送缓冲区空

5)发送停止信号

EEPROM使用

CAT24WC16芯片是CATALYST(美凯特里斯)公司(已被安森美半导体ONSEMI)收购,生产的串行电可檫除的可编程存储器。

NVIC中断

CM3中断优先级:抢占式优先级(主)和响应优先级(从)。

STM32中断编程的规定动作:

1、时钟配置

2、GPIO配置

3、EXTI配置(中断源选择、清除中断标志、触发模式等)

4、NVIC配置()

5、中断服务子程序

PWM基础

1、PWM即Pulse Width Modulation,脉冲宽度调制。是一种对模拟信号电平进行数字编码的方法。等效的实现是基于采样定理中一个重要的结论:冲量相等而形状不同的窄脉宽加在具有惯性的环节上时,其效果基本相同。冲量即窄脉冲的面积,效果相同指的是该环节输出响应波形基本相同。

2、STM32除了TIM6和7都可以产生PWM,其中高级定时器TIM1和8可同时产生多达7路的PWM输出。其他通用定时器也可产生多达4路PWM输出。

RCC内部结构与原理

时钟是STM32的脉搏,是驱动源。外设的使用,打开和关闭对应的时钟,节能降低功耗。

设置时钟流程:

1、RCC_DeInit()默认值

2、打开外部高速时钟晶振HSE。RCC_HSEConfig( )

3、等待HSE工作。 RCC_WaitForHSEStartUp()

4、设置AHB时钟。RCC_HCLKConfig( )

5、设置高速APB时钟。RCC_PCLK2Config( )

6、设置低速APB时钟。RCC_PCLK1Config( )

7、设置PLL 。RCC_PLLConfig( )

8、打开PLL。 RCC_PLLCmd(ENABLE )

9、等待PLL工作。 While( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET )

10、设置系统时钟。RCC_SYSCLKConfig()

11、判断是否PLL是系统时钟。While(Get_SYSCLKSource() != 0x08)

12、打开要使用的外设时钟。RCC_APB2PeriphClockCmd( )/ RCC_APB1PeriphClockCmd( )

RTC结构和特点

1.RTC结构包含两个部分。

1)APB1接口部分(控制寄存器)

2)有可编程计数器组成,分两个模块。预分频模块和32位计数器模块,前者产生秒信号和秒中断,后者产生闹钟中断。

2.RTC特点

1)可编程的预分频系数:最大分频系数为220。

2)32为可编程计数器,用于较长时间段的测量。

3)2个单独时钟,用于APB1接口的PCLK时钟和RTC时钟。(RTC时钟小于PCLK四分之一以上)

4)两种的复位类型:APB1接口由系统复位,RTC只能由后备域复位。

5)3个专门的可屏蔽中断:闹钟中断,秒中断,溢出中断。

RTC配置过程:

1.查询RTOFF位,直到该位置“1”。

2.置CNF位为“1”,进入配置模式。

3.对一个或多个RTC寄存器进行写操作。

4.清除CNF位,退出配置模式。

5.查询RTOFF位,直到RTOFF位变为“1”以确认写操作完成。(仅当CNF标志位被清除时,写模式才能进行,这个过程至少需要3个RTCLK周期)

RTC使用

1.打开APB1总线上的PWR、BKP时钟。

2.使能RTC和后备寄存器访问。

3.复位备份寄存器设置

4.打开RTC时钟(外部或系统)

5.打开RTC寄存器同步(APB1)

6.RTC使能秒中断,闹钟中断,分频值32767k。(RTC_WaitForLastTask( )  )

7.设置当前时钟值。

ADC模数转换

STM32拥有1~3个ADC,可以单独使用,也可以使用双重模式(提高采样率)。

STM32的ADC是12位的逐次逼近型的模数转换器。有18个通道,可以测量16个外部2个内部信号源,各通道A/D转换可以单次、连续、扫描或间断模式执行。

模拟看门狗允许应用程序检测输入的电压是否超出用户定义的阈值。

最大转换速率1Mhz,转换时间为1us(在ADCCLK=14Mhz,采样周期为1.5个ADC时钟下得到)若ADC的时钟超过14Mhz,则采样准确率下降。

内部温度传感器

1、与ADCx_IN16相连。

2、-40—125度测量范围,精度为1.5度。采样时间大于2.2us。

3、配置ADC_CR2寄存器TSVREFE位,唤醒关电模式下的温度传感器。

4、设置ADCON位启动ADC(或外部触发)。

5、读ADC数据寄存器的V SENSE结果。

6、利用公式算出温度:T = ((V25 – Vsence)/Avg_Slope + 25)

窗口看门狗

Twwdg = Tpclk1 * 4096 * 2 (WDGTB) *( T[5:0] + 1) ;  ms

在0x40—设置窗口值之间喂狗,否则过早或过晚都会引起复位。用于时间要求严格的特殊应用。

低功耗模式与唤醒

三种低功耗模式:1)睡眠模式  2)停止模式  3)待机模式 )*正常运行下降低功耗

在产品是电池供电时,适合配置低功耗模式。并根据最低电源消耗,最快启动时间和可用唤醒源来选择最佳的低功耗模式。

USB应用

Universal Serial Bus通用串行总线,包括USB1.0/1.1,USB2.0,USB OTG。

USB1.1协议:

1、信号层:NRZI反向不归零编码方式

2、协议层:数据包6部分同步字段、包标示符、地址字段、数据字段、检验字段、包结束。

3、数据传输层4种方式:控制传输,同步传输,中断传输,大容量数据传输。

USB设备协议

当一个USB设备插入后的活动:供电复位获取设备描述符复位(可选)分配地址获取设备描述符获取配置描述符获取字符描述符(可选)配置

STM32实现USB设备的操作:

1、根据应用选择合适的USB类实现。

2、根据所选择的USB类协议,完成各个描述符。

3、根据描述符初始化端点数目,分配各端点所需使用的Packet Buffer。

4、初始化所使用的端点,配置端点的传输类型、方向、Packet Buffer地址和初始状态。

5、在需要接收或发送数据的时候,使能端点。

6、在该端点的中断回调函数中,处理数据,如果需要则使能下一次传输。

STM32的USB库函数:

Stm32f10x_it.c :包含USB中断服务程序,由于USB中断有很多情况,这里的中断服务程序只是调用usb_Istr.c文件中的USB_Istr函数。由USB_Istr函数再做轮询处理。

usb_Istr.c:该文件只有一个usb_Istr函数,对USB中断事件做轮询处理。

usb_prop.c : 该文件用于实现相关设备的USB协议,例如初始化、SETUP包、IN包、OUT包。

usb_pwr.c: 该文件包含处理上电、掉电、挂起和恢复事件的函数。

hw_config.c: 该文件包含系统配置的函数。

三、问题

串口引脚

1 载波检测(DCD)    

2 接受数据(RXD)    

3 发出数据(TXD)  

4 数据终端准备好(DTR)       

5 信号地线(SG)     

6 数据准备好(DSR)      

7 请求发送(RTS)      

8 清除发送(CTS)      

9 振铃指示(RI)

USBASP接口引脚

在线调试

1) 在线调试时,出现“CPU is not halted”,是因为没有关闭看门狗。

2) 在没有任何操作的情况下,STM32通用推挽输出模式的引脚默认低电平,也就是有电的状态,虽然电平小没有电阻也可以驱动LED灯点亮,这就是为什么引脚控制LED灯要接下拉(或上拉)电阻。

3) 串行通信协议:串行通信协议分同步协议和异步协议。(1)异步通信协议的实例——起止式异步协议。(2)面向字符的同步协议。(3)面向比特的同步协议。其中面向比特的同步协议帧格式如下:

4) systick中断处理函数中,如果处理很多函数,那么在时钟单位内,可能处理不过来,导致不停复位。

5) 485通信采用半双工通信,发送时控制信号高电平,接收时控制信号为低电平,通信为主从模式。

6) CAN通信为多主通信,属于全双工通信。若初始化配置没问题,其他应该问题不大,终端电阻(一般120欧)是保证通信质量的,简单短线组网,不加电阻也是可以。下载本文

显示全文
专题