资讯详情

STM32学习笔记

STM32是一个带有各种常用通信接口的微控制器

1、串口----USART

2.内部集成电路----I2C

三、串行通信接口 ----SPI

4、SDIO、FSMC的超级、I2S

手镯、平衡车、扫地机器人

所需资料:原理图、参考手册、数据手册

去keil官网下载不同芯片的芯片包,然后双击安装

然后将ST-Link线插上电脑USB下一步行下一步操作

选择falsh大小即可

(运行)第一种模式boot0= 0,boot1=在这种模式下,0或1(默认0),STM 32正常读取芯片内部存储空间的程序运行正常程序。

(烧写)二中模式,boot0=1,boot1=0点,进入调试模式,修改后的代码可以通过烧录工具生成HEX将文件烧录到芯片中,然后将其烧录到芯片中boot0跳线跳回0,执行代码

第三种,boot0=1,boot1=1, 需要注意的是,内置一般不使用SRAM启动(BOOT1=1 BOOT0=1),因为SRAM掉电后数据丢失,多数情况下SRAM只在调试中使用,也可以做其他用途,如局部故障诊断,写一个小程序载入SRAM其诊断板的其他电路,或用方法读 写板的Flash或EEPROM等,可以通过种方法解除内部Flash读写保护,当然解除了读写保护Flash自动清除内容,防止恶意软件复制。

电源

晶振IO

下载IO

BOOT IO 设置系统的启动模式

复位IO

------------------------------上面5部分IO我们也称之为组成系统最小系统

GPIO

给具有特定功能的内存单元取个别名,这个别名就是我们常说的寄存器,这个给具有特定功能的内存单元取个别名的过程叫做寄存器映射

将地址分配给存储器的过程称为存储映射,然后将地址分配为重映射

I指的是instruction,也就是说,在我们编写的程序编译后,我们都是一个指令,存储在 FLASH内核必须通过阅读这些指令来执行程序 ICode 总线,几乎每时每刻都需要使用,专门用来取指

DCode 中的 D 表示 Data,也就是说,数据表明这条总线是用来计数的。当我们编写程序时,数据有两种常量和变量。常量是固定的和不变的 C 语言中的 const 关键词修改,放在内部 FLASH其中,可变的,无论是全局变量还是局部变量都放在内部的 SRAM。因为数据可以被Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来

仲裁,决定哪个总线在取数

系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。

DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在 SRAM,可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

清零公式

第八位清零 保证其他位不变

temp = temp & ~(0x1<<8) 清零公式

temp = temp | ~(0x1<<8) 置一公式

新建文件夹

然后打开keil5新建工程

添加三个文件

1、将启动文件拷贝过来

2、stmf10x.h 手动新建,用于存放寄存器映射的代码,暂时为空

3、main.c 手动新建,用于存放main函数,暂时为空

1.新建文件夹,Smart_Lock > cmsis user > inc 、 src

2. 移植固件库

添加启动文件宏和头文件路径

新建文件夹------>

Doc

Libraries---->驱动库的源代码以及启动文件

Project----->存放工程文件---->里面包含src(源文件)和inc(头文件)

User------>自己写的函数如main.c

新建工程在Project里--->选择芯片

stm32f10x_conf.h 这个文件还可配置是否使用“断言”编译选项

C/C++中的define USE_STDPERIPH_DRIVER,STM32F10X_HD

再include Paths 把全部.h文件的路径添加进去

gpio是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据的采集功能。

芯片一共 100 个引脚,其中 GPIO 就占了一大部分,所有的 GPIO引脚都有基本的输入输出功能。

1.通用输出

1.1:输出推挽

即可输出高电平,又可以输出低电平。

1.2:输出开漏

只可以输出低电平,不可以输出高电平

如果要输出高电平要外接上拉电阻

注意: 当IO口配置为输出模式的时候,输入输出电路都打开。

上拉和下拉电阻:就是接了电源或者地的电阻,当IO口没有电流流过时,

可以将IO拉成高电平或者低电平,芯片内部的上拉下拉电阻一般直接禁止。

2.通用输入

1. 上拉输入

2. 下拉输入

3. 浮空输入

注意: (1)当IO口配置为开漏输出并且输出高电平的时候,与浮空输入没有任何区别。

(2)当IO配置为输入模式的时候,输出电路是关闭的。

3.复用功能------数据来自片上外设

1. 复用推挽

外设既可以发送“1”,也可以发“0”.

2. 复用开漏

外设只可以发“0”,不可以发“1”.

注意: (1)复用模式和通用模式的区别就在于IO口信号由外设驱动。

(2)复用模式对输出数据寄存器赋值,没有任何效果,但是对输入数据寄存器读值

依然可以获取IO的状态

4.模拟功能

1.输入输出电路都被关闭

2.对输入数据寄存器的读访问恒定为0

3.上下拉电阻强制被禁止

用在 AD和DA 模数和数模转换器里,一般在一些传感器用的较多。

STM32 对于IO分组是采样字母进行分组

GPIOx (x A~I) 每一个分组一共有16个IO口

0~15

PA0~PA15

PB0~PB15

总线空闲时的电平是高电平

当发送数据的时候,总线会被拉低

串口先发低位

配置模式是使用端口配置低寄存器CRL和端口配置高寄存器CRH------每四个位控制一个GPIO

配置寄存器ODR

包含了片上外设的全部寄存器

#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)<<5)+(bitnum<<2))

// 把一个地址转换成一个指针

#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))

// 把位带别名区地址转换成指针

#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))

最终

#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出

简便方式:

define GPIO_ODR_Addr (GPIO_BASE+0x0C)

define PBout(n) *((unsigned int*)((GPIO_ODR_Addr & 0xF0000000)+0x02000000+((GPIO_ODR_Addr & 0x00FFFFFF)<<5)+(n<<2))

汇编是上电后第一执行的文件

1、配置栈,变量(局部、全局),函数调用

2、配置堆,主要用于动态内存的分配malloc()

3、初始化中断向量表

4、编写复位程序 (最开始执行---初始化系统时钟)

5、编写中断服务函数

6、用户堆和栈的初始化

调用C库函数_main,去到C的世界

PCLK2 = HCLK = SYSCLK=PLLCLK = 72M

PCLK1=HCLK/2 = 36M 这个时钟配置也是库函数的标准配置

三种不同的时钟源可被用来驱动系统时钟

HSI振荡器时钟 一般不用,受温度条件影响较大

HSE振荡器时钟 常用

PLL时钟

配置时钟初始化函数时,要先把 RCC 外设初始化成复位状态

RCC_DeInit();

两个重要库文件core_cm3.h 和 misc.h

core_cm3.h 中NVIC结构体定义

typedef struct {

__IO uint32_t ISER[8]; // 中断使能寄存器

uint32_t RESERVED0[24];

__IO uint32_t ICER[8]; // 中断清除寄存器

uint32_t RSERVED1[24];

__IO uint32_t ISPR[8]; // 中断使能悬起寄存器

uint32_t RESERVED2[24];

__IO uint32_t ICPR[8]; // 中断清除悬起寄存器

uint32_t RESERVED3[24];

__IO uint32_t IABR[8]; // 中断有效位寄存器

uint32_t RESERVED4[56];

__IO uint8_t IP[240]; // 中断优先级寄存器 (8Bit wide)

uint32_t RESERVED5[644];

__O uint32_t STIR; // 软件触发中断寄存器

} NVIC_Type;

配置终端的时候一般只用 ISER、ICER、IP 这三个寄存器

NVIC的固件库函数,不是放在core_cm3.c中 而是放在misc.c中

在 NVIC 有一个专门的寄存器:中断优先级寄存器 NVIC_IPRx,用来配置外部中断的优先级

先比较主优先级,再比较子优先级,都相同就比较硬件中断优先级(中断事件向量表)

优先级越高,数值越小

设置优先级分组可调用库函数 NVIC_PriorityGroupConfig() 实现,有关 NVIC 中断相关的库函数都在库文件 misc.c 和 misc.h 中。

中断优先级分组库函数NVIC_PriorityGroupConfig()

1、使能中断请求-----配置外设相应寄存器(小门)-----NVIC(大门)

2、配置终端优先级分组

3、配置NVIC寄存器,初始化NVIC_InitTypeDef 结构体

在misc.h中

有四个成员 1、中断源在stm32f10x IRQn_Type里面找

2、和3、根据中断优先级分组进行设值

4、 enable或者disable

4、编写中断服务函数 名称在启动文件中断向量表中找,函数写在stm32f10x_it.c里面

在配置中断的时候一般有3个编程要点

1、使能外设某个中断,这个具体由每个外设的相关中断使能位控制。比如串口有发送完成中

断,接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。

2、初始化NVIC_InitTypeDef 结构体,配置中断优先级分组,设置抢占优先级和子优先级,使

能中断请求。NVIC_InitTypeDef 结构体在固件库头文件 misc.h 中定义。

GPIO---->EXTI---->NVIC

1-EXTI_Line:用于产生 中断/事件 线 和输入线没关系,为了确定下面那几个寄存器是哪位

2-EXTI_Mode: EXTI模式(中断/事件)

3-EXTI_Trigger:触发(上/下/上下)

4-EXTI_LineCmd: 使能或者失能( IMR/EMR)

确定哪根线,是从gpio.c中GPIO_EXTI

1-初始化要连接到EXTI的GPIO

2-初始化EXTI用于产生中断/事件

GPIO_EXTILineConfig() 选择输入线

开输AFIO的时钟 因为配置EXTI信号源的时候需要用到AFIO的外部中断控制寄存器

初始化结构体 4个成员

3-初始化NVIC,用于处理中断

配置终端优先级分组

配置NVIC寄存器,初始化NVIC_InitTypeDef 结构体

4-编写中断服务函数

5-main函数

24位,只能递减,存在于内核中

读取SysTick->CTRL寄存器的第十六位的值,就可以知道系统定时器计数是否为0

void SysTick_Delay_ms(uint32_t ms)

{

uint32_t i;

SysTick_Config(72000);

for(i=0; i<ms; i++)

{

while( !((SysTick->CTRL) & (1<<16)) );

}

SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; //关闭SysTick定时器

}

规定通信系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分

协议层主要规定通信逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分

芯片出来的都是TTL电平

主要用于工业设备之间通信

电平转换芯片一般有 MAX3232,SP3232

RS-232 与TTL电平区别

(+15 -15) (5v 0v)

主要用于设备与电脑通信

芯片一般有 CH340、PL2303、CP2102、FT232

使用的时候电脑端需要安装电平转换芯片的驱动

主要用于控制器和串口设备或者传感器通信,直接使用TTL电平通信

GPS模块、GSM模块、串口转WIFI模块、HC04蓝牙模块

起始位:由1个逻辑 0 的数据位表示

结束位:由 0.5、 1、 1.5 或 2 个逻辑 1 的数据位表示

有效数据:在起始位后紧接着的就是有效数据,有效数据的长度常被约定为 5、 6、 7 或 8 位还有9位长

校验位:可选,为的是数据的抗干扰性。

校验方法分为:

1-奇校验(odd)、   2-偶校验(even)

3-0 校验(space)、 4-校验(mark)

5-无校验(noparity)

通用同步异步收发器是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。

有别于 USART 还有一个 UART,它是在 USART 基础上裁剪掉了同步通信功能,只有异步

通信。我们平时用的串口通信基本都是 UART。

USART 在 STM32 应用最多莫过于“打印”程序信息,一般在硬件设计时都会预留一个 USART

通信接口连接电脑,用于在调试程序是可以把一些调试信息“打印”在电脑端的串口调试助手工

具上,从而了解程序运行是否正确、如果出错哪具体哪里出错等等。

当发送的时候,发送完成的时候,TXE和TC会被置1

当接收的时候,输入寄存器有值的时候,RXNE会被置1

USART_GetFlagStatus(); 可以调用这个函数对标志位进行检测

1) 使能 RX 和 TX 引脚 GPIO 时钟和 USART 时钟;

2) 初始化 GPIO,并将 GPIO 复用到 USART 上;

3) 配置 USART 参数;

4)串口中断优先级配置

5) 配置中断控制器并使能 USART 接收中断;

6) 使能 USART;

7) 在 USART 接收中断服务函数实现数据接收和发送。

主要功能:把数据从一个地方搬到另一个地方,而且不占用CPU

不同的 DMA 控制器的通道对应着不同的外设请求,这决定了我们在软件上该怎么样编程

每个通道都是独立的,每个通道都可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个,当同时收到多个请求的时候,就意味着有先后响应处理的顺序问题

仲裁器---根据寄存器中设置的优先级进行判断,如果软件优先级一样,则编号越低优先级越高,通道0优先于通道1 ,DMA1优先于DMA2

1) 使能 DMA 时钟;

2) 配置 DMA 数据参数;

3) 使能 DMA,进行传输; ----使能DMA之前先对DMA标志位进行清零操作

4) 等待传输完成,并对源数据和目标地址数据进行比较。

const 关键字将变量定义为常量类型,表示数据存储在FLASH中

一般变量---代码则存储在内部的SRAM中

DMA_GetFlagStatus(); //获取标志位

编程要点

1) 配置 USART 通信功能;

2) 设置串口 DMA 工作参数;

3) 使能 DMA;

4) DMA 传输同时 CPU 可以运行其他任务。

1、支持设备的总线-----支持多个主机与多个从机

2、使用两条总线,一条双向串行数据线(SDA),一条串行时钟线(SCL)

3、每个连接到总线的设备都有一个独立的地址,设备之间利用地址来访问

4、总线通过上拉电阻接到电源,设备空闲的时候,会输出高阻态

5、多主机同时使用总线时,通过仲裁方式防止数据冲突

6、具有三种传输模式,标准模式100kbit/s,快速模式为 400kbit/s ,高速模式下可达

3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式。

7、连接到相同总线的IC数量受到总线的最大电容400pF限制

协议层规定了通讯的起始位和停止位、数据有效性、响应、仲裁、时钟同步和地址广播

主机写数据到从机

主机由从机中读数据

通讯复合格式

总线上的每个设备都有自己的独立地址,地址可以是 7 位或 10 位,紧跟设备地址的一个数据位用来表示数据传输方向,

数据位为1的时候表示主机由从机 读数据

数据位为0的时候表示主机由从机 写数据

当设备接收到I2C传输的一个字节数据或地址后,

若希望对方继续发数据,则需要向对方发送一个应答(ACK)信号,

希望结束数据传输则向对方发送一个(NACK),发送方接收到该信号后会接着发送一个停止信号,结束信号传输

SDA为高电平,表示NACK

低电平,表示ACK

初始化结构体

初始化I2C

使能I2C

通过IO口输出模拟总线的SDA信号和CLK信号

EEPROM是一种掉电后数据不丢失的存储器,常用来配置一些配置信息,以便系统重新上电的时候加载出来

在EEPROM的

(1) 初始化GPIO,配置通讯使用的目标引脚为开漏模式;

(2) 使能 I2C 外设的时钟;

(3) 配置 I2C 外设的模式、地址、速率等参数并使能 I2C 外设;

(4) 编写基本 I2C 按字节收发的函数;

(5) 编写读写 EEPROM 存储内容的函数;

(6) 编写测试程序,对读写数据进行校验。

spi使用三条总线以及先选线

SCK

MOSI(Master Output, Slave Input,)

MISO(Master Input,, Slave Output)

SS 也称 CS 片选信号线

NSS由高电平变低电平的时候开始通信,低到高结束通信

什么时候采样,什么时候触发由CPOL/CPHA决定

共有4种通讯模式

编程要点

(1) 初始化通讯使用的目标引脚及端口时钟;

(2) 使能 SPI 外设的时钟;

(3) 配置 SPI 外设的模式、地址、速率等参数并使能 SPI 外设;

(4) 编写基本 SPI 按字节收发的函数;

(5) 编写对 FLASH 擦除及读写操作的的函数;

(6) 编写测试程序,对读写数据进行校验。

STM32f103 系列有 3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道,2个内部通道。

规则顺序寄存器SQR有三个

注入顺序寄存器JSQR只有一个

规则数据寄存器ADC_DR只有一个,是32位的,低16位保存ADC1的数据,高16位保存ADC2的数据,但是由于ADC的精度是12位的,所以还要设置是右对齐还是左对齐

数据转换之后,可以产生中断,中断分为三种:

规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断

规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA 请求,把转换好的数据直接存储在内存里面。要注意的是只有 ADC1 和 ADC3 可以产生 DMA 请求。

1) 初始 ADC 用到的 GPIO;

2) 设置 ADC 的工作参数并初始化;

3) 设置 ADC 工作时钟频率;

4) 设置 ADC 转换通道顺序及采样时间;

5) 配置使能 ADC 转换完成中断,在中断内读取转换完数据;

6) 使能 ADC;

7) 使能软件触发 ADC 转换。

ADC 转换结果数据使用中断方式读取,这里没有使用 DMA 进行数据传输。

1) 初始化 ADC GPIO;

2) 初始化 ADC 工作参数;

3) 配置 DMA 工作参数;

4) 读取 ADC 采集的数据;

ADC 转换结果数据使用 DMA 方式传输至指定的存储区,这样取代单通道实验使用中断服务的

读取方法。实际上,多通道 ADC 采集一般使用 DMA 数据传输方式更加高效方便

基本定时器的功能框图:

时钟源可以看RCC时钟树那张图

基本定时器的核心是时基,不仅基本定时器有,通用定时器和高级定时器也有。

定时器的定时时间等于计数器的中断周期乘以中断的次数。

计数器在 CK_CNT 的驱动下

计一个数的时间 则是 CK_CLK 的倒数,等于: 1/(TIMxCLK/(PSC+1))

产生一次中断的时间 则等于:1/(CK_CLK * ARR)

(1) 开定时器时钟 TIMx_CLK, x[6,7];

(2) 初始化时基初始化结构体;

(3) 使能 TIMx, x[6,7] update 中断;

(4) 打开定时器;

(5) 编写中断服务程序

通用定时器和高级定时器的定时编程要点跟基本定时器差不多,只是还要再选择下计数器的计数模式,是向上还是向下。因为基本定时器只能向上计数,且没有配置计数模式的寄存器,默认是向上。

高级控制定时器 (TIM1 和 TIM8) 和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能。

高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车 (断路) 功能,这些功能都是针对工业电机控制方面。

1、内部时钟源CK_INT 最常用

2、外部时钟模式 1:外部输入引脚 TIx(x=1,2,3,4)

3、 外部时钟模式 2:外部触发输入 ETR

4、内部触发输入(ITRx)

其中重复计数器RCR是高级定时器独有

输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输入信号的脉宽和测量 PWM 输入信号的频率和占空比这两种。

输入捕获的大概的原理就是,当捕获到信号的跳变沿的时候,把计数器 CNT 的值存到捕获寄存器 CCR 中,把前后两次捕获到的 CCR 寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,这个我们需要做额外的处理。

需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入

当输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样。

边沿检测器用来设置信号在捕获的时候是什么边沿有效,可以是上升沿,下降沿,或者是双边沿,

当发生捕获的时候,计数器 CNT 的值就会被锁存到捕获寄存器中。

这里我们要搞清楚输入通道和捕获通道的区别,输入通道是用来输入信号的,捕获通道是用来捕

获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。

ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。具体的由寄存

器 CCMRx 的位 ICxPSC 配置,如果希望捕获信号的每一个边沿,则不分频。

经过预分频器的信号 ICxPS 是最终被捕获的信号,当发生捕获时(第一次),计数器 CNT 的值会

被锁存到捕获寄存器 CCR 中,还会产生 CCxI 中断,相应的中断位 CCxIF(在 SR 寄存器中)会

被置位,通过软件或者读取 CCR 中的值可以将 CCxIF 清 0。如果发生第二次捕获(即重复捕获:

CCR 寄存器中已捕获到计数器值且 CCxIF 标志已置 1),则捕获溢出标志位 CCxOF(在 SR 寄存

器中)会被置位, CCxOF 只能通过软件清零

输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为

匹配时输出有效电平、将通道 X 设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变

为有效电平、 PWM1 和 PWM2 这八种模式,具体使用哪种模式由寄存器 CCMRx 的位 OCxM[2:0]

配置。其中 PWM 模式是输出比较中的特例,使用的也最多。

当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信号的极性

就会改变,其中 OCxREF=1(高电平)称之为有效电平, OCxREF=0(低电平)称之为无效电平,

并且会产生比较中断 CCxI,相应的标志位 CCxIF(SR 寄存器中)会置位。然后 OCxREF 再经过

一系列的控制之后就成为真正的输出信号 OCx/OCxN。

在生成的参考波形 OCxREF 的基础上,可以插入死区时间,用于生成两路互补的输出信号 OCx

和 OCxN,死区时间的大小具体由 BDTR 寄存器的位 DTG[7:0] 配置。死区时间的大小必须根据与

输出信号相连接的器件及其特性来调整。

输入捕获一般应用在两个方面,一方面是脉冲跳变沿时间测量,另一方面是PWM输入检测

1.1测量频率

1.2测量脉宽

测量脉宽和频率还有一个更简便的方法就是使用 PWM 输入模式,该模式是输入捕获的特例,只

能使用通道 1 和通道 2,通道 3 和通道 4 使用不了。与上面那种只使用一个捕获寄存器测量脉宽

和频率的方法相比, PWM 输入模式需要占用两个捕获寄存器。

当使用 PWM 输入模式的时候,因为一个输入通道 (TIx) 会占用两个捕获通道 (ICx),所以一个定

时器在使用 PWM 输入的时候最多只能使用两个输入通道 (TIx)。

PWM 信号由输入通道 TI1 进入,因为是 PWM 输入模式的缘故,信号会被分为两路,一路是

TI1FP1,另外一路是 TI2FP2。其中一路是周期,另一路是占空比,具体哪一路信号对应周期还

是占空比,得从程序上设置哪一路信号作为触发输入,作为触发输入的哪一路信号对应的就是

周期,另一路就是对应占空比。作为触发输入的那一路信号还需要设置极性,是上升沿还是下降

沿捕获,一旦设置好触发输入的极性,另外一路硬件就会自动配置为相反的极性捕获,无需软件

配置。一句话概括就是:选定输入通道,确定触发信号,然后设置触发信号的极性即可,因为是

PWM 输入的缘故,另一路信号则由硬件配置,无需软件配置。当使用 PWM 输入模式的时候必须将从模式控制器配置为复位模式

输出比较模式总共8种,最常用的就是PWM模式

pwm输出就是对外输出脉宽(占空比)可调的方波信号,信号频率由自动装载寄存器ARR的值决定,占空比由比较寄存器CCR的值决定。

PWM 模式分为两种, PWM1 和 PWM2,总得来说是差不多,就看你怎么用而已,具体的区别见

表格 PWM1 与 PWM2 模式的区别 。

以计数器 CNT 计数的方向不同还分为边沿对齐模式和中心对齐模式。

在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0

开始计数并生成计数器上溢事件

在边沿对齐模式下,计数器 CNT 只工作在一种模式,递增或者递减模式。这里我们以 CNT 工作

在递增模式为例,在中, ARR=8, CCR=4, CNT 从 0 开始计数,当 CNT<CCR 的值时, OCxREF

为有效的高电平,于此同时,比较中断寄存器 CCxIF 置位。当 CCR=<CNT<=ARR 时, OCxREF

为无效的低电平。然后 CNT 又从 0 开始计数并生成计数器上溢事件,以此循环往复。

在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器 CNT 从 0 开始

计数到自动重载值减 1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数

标签: 电容etr

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司