STM32嵌入式应用开发 课件 胡永华 第7-11章 I2C通信-模拟数字转换_第1页
STM32嵌入式应用开发 课件 胡永华 第7-11章 I2C通信-模拟数字转换_第2页
STM32嵌入式应用开发 课件 胡永华 第7-11章 I2C通信-模拟数字转换_第3页
STM32嵌入式应用开发 课件 胡永华 第7-11章 I2C通信-模拟数字转换_第4页
STM32嵌入式应用开发 课件 胡永华 第7-11章 I2C通信-模拟数字转换_第5页
已阅读5页,还剩106页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

串口通信的缺点USB转TTLUSART1

USART2c8t6单片机显示器模块摄像头模块Wifi模块USART3I2C通信I2C(Inter-IntegratedCircuit)是由Philips公司开发的一种通用数据总线两根通信线:SCL(SerialClock)、SDA(SerialData)同步,半双工带数据应答支持总线挂载多设备(一主多从、多主多从)硬件电路所有I2C设备的SCL连在一起,SDA连在一起设备的SCL和SDA均要配置成开漏输出模式SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右主机产生SCL信号,从而控制通信的速度,仅有主机可以主动发起数据传输,传输方向:主机->从机,从机->主机,不存在从机->从机

主机

上拉电阻从机2从机1SDA

SCL

从机n7位从机地址1

7位从机地址27位从机地址n(n<=127)SCL

SDA

SCL(时钟)

SDA(数据)SDA

SCLSDA

SCLVcc线与使用硬件电路实现逻辑“与”,输出=

A

&

B

&

C

&…SDASCL4.7k从机1

从机2

从机3SCLSDASDASCLSDASCLSDASCL主机VccSCL信号的产生SDASCL4.7k从机1

从机2

从机3SCLSDASDASCLSDASCLSDASCL主机VccSCL输出=主机&1&1&1&...SDA信号的产生0

100

101

1SDASCL4.7k从机1

从机2

从机3接收方采集数据发送方准备数据SCLSDASCLSDASDASCLSDASCLSDASCL主机Vcc主机发送数据=主机&1&1&1&...从机发送数据=1&从机&1&1&...数据帧格式起始位和停止位起始位StartSCL=1,SDA

停止位StopSCL=1,SDA

SCLSDA空闲:SCL=H,SDA=H寻址与应答应当信号ACK-Acknowledge告知收到起始位主机释放

SDA从机拉低

SDA0

1

1

1

1

0

0

RWACKACKSCLSDA7位地址+RW寻址0x78(读)01111001A6A5A4A3A2A1A0R/W数据发送与接收示例1、向从机0x78写两个字节{0x5a,0x33}2、从从机0x20读一个字节(假设读到的是0x64)发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答(ACK信号),数据1表示非应答(NACK信号)。接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答(ACK信号),数据1表示非应答(NACK信号)注意:读完数据后发送的是NACK信号,告知对方不需要再发送数据了I2C外设简介STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型支持7位/10位地址模式支持不同的通讯速度,标准速度(高达100kbps),快速(高达400kbps)支持DMA兼容SMBus协议STM32F103C8T6硬件I2C资源:I2C1、I2C2I2C框图I2C基本结构TDR-Transmit

Data

Register

-

发送数据寄存器RDR-Receive

Data

Register

-

接收数据寄存器CR-Control

Register

-

控制寄存器SR1-Status

Register

1

-

状态寄存器1SR2-Status

Register

2

-

状态寄存器2CCR-Clock

Control

Register

-

时钟控制寄存器7654321076543210

时钟控制寄存器(CCR)SDASCLSBAFADDRTxERxNEBTFHAL库的编程接口PESTARTACKPOSSTOPSCL控制SDA控制TRABUSYMSL发送接收时钟来自PCLK1总开关SR2SR1TDRRDRCRI2C的HAL库函数函数名功能描述HAL_I2C_IsDeviceReady()检查某个从设备是否准备好了I2C通讯HAL_I2C_Master_Transmit()作为主设备向某个地址的从设备发送一定长度的数据HAL_I2C_Master_Receive()作为主设备从某个地址的从设备接收一定长度的数据HAL_I2C_Slave_Transmit()作为从设备发送一定长度的数据HAL_I2C_Slave_Receive()作为从设备接收一定长度的数据HAL_I2C_Mem_Write()向某个从设备的指定存储地址开始写入一定长度的数据HAL_I2C_Mem_Read()从某个从设备的指定存储地址开始读取一定长度的数据I2C的HAL库函数函数名函数功能描述关联的回调函数HAL_I2C_Master_Transmit_IT()主设备向某个地址的从设备发送一定长度的数据HAL_I2C_MasterTxCpltCallback()HAL_I2C_Master_Receive_IT()主设备从某个地址的从设备接收一定长度的数据HAL_I2C_MasterRxCpltCallback()HAL_I2C_Master_Abort_IT()主设备主动终止中断传输过程HAL_I2C_AbortCpltCallback()HAL_I2C_Slave_Transmit_IT()作为从设备发送一定长度的数据HAL_I2C_SlaveTxCpltCallback()HAL_I2C_Slave_Receive_IT()作为从设备接收一定长度的数据HAL_I2C_SlaveRxCpltCallback()HAL_I2C_Mem_Write_IT()向某个从设备的指定存储地址开始写入一定长度的

数据HAL_I2C_MemTxCpltCallback()HAL_I2C_Mem_Read_IT()从某个从设备的指定存储地址开始读取一定长度的数据HAL_I2C_MemRxCpltCallback()所有中断方式传输函数中断方式传输过程出现错误HAL_I2C_ErrorCallback()I2C的HAL库函数函数名函数功能描述关联的回调函数HAL_I2C_Master_Transmit_DMA()向某个地址的从设备发送一定长度的数据HAL_I2C_MasterTxCpltCallback()HAL_I2C_Master_Receive_DMA()从某个地址的从设备接收一定长度的数据HAL_I2C_MasterRxCpltCallback()HAL_I2C_Slave_Transmit_DMA()作为从设备发送一定长度的数据HAL_I2C_SlaveTxCpltCallback()HAL_I2C_Slave_Receive_DMA()作为从设备接收一定长度的数据HAL_I2C_SlaveRxCpltCallback()HAL_I2C_Mem_Write_DMA()向某个从设备的指定存储地址开始写入一

定长度的数据HAL_I2C_MemTxCpltCallback()HAL_I2C_Mem_Read_DMA()从某个从设备的指定存储地址开始读取一

定长度的数据HAL_I2C_MemRxCpltCallback()硬件I2C示例如何驱动SSD1306SSD1306的地址?SSD1306怎么区分命令和数据?SSD1306的常用命令有哪些,怎么对它进行初始化?SSD1306的寻址模式有哪些?它决定了显存寻址方式和数据写入顺序。硬件I2C示例硬件I2C初始化屏幕初始化(移植OLED驱动)将本库的oled.c,font.c文件加入工程,将oled.h,font.h文件添加到头文件路径STM32初始化IIC完成后调用OLED_Init()初始化OLED,注意STM32启动比OLED上电快,可等待20ms再初始化OLED调用OLED_NewFrame()开始绘制新的一帧调用OLED_DrawXXX()系列函数绘制图形到显存调用OLED_Printxxx()系列函数绘制文本到显存调用OLED_ShowFrame()将显存内容显示到OLEDOLED显示坐标系课后练习将自己的个人信息(比如姓名)显示在OLED上显示图片播放视频:比如播放知名艺人打篮球视频SPI通信SPI(SerialPeripheralInterface)是由Motorola公司开发的一种通用数据总线四根通信线:SCK(SerialClock)、MOSI(MasterOutputSlaveInput)、MISO(MasterInputSlaveOutput)、SS(SlaveSelect)同步,全双工支持总线挂载多设备(一主多从)硬件电路所有SPI设备的SCK、MOSI、MISO分别连在一起主机另外引出多条SS控制线,分别接到各从机的SS引脚输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入MISO(MasterInputSlaveOutput)-主收从发MOSI(MasterOutputSlaveInput)-主发从收SCK(SerialClock)-串行时钟SS(SlaveSelect)-从机选择移位示意图SPI数据收发是双向的、同时的每发送一个比特位必然会接收一个比特位SPI时序基本单元起始条件:SS从高电平切换到低电平终止条件:SS从低电平切换到高电平SSSSSPI的4种模式交换一个字节(模式0)极性CPOL=0:空闲状态时,SCK为低电平相位CPHA=0:SCK第一个边沿采集数据,第二个边沿发送数据SS……SCK……MOSI……B7B6B0MISO……B7B6B0SPI的4种模式交换一个字节(模式1)极性CPOL=0:空闲状态时,SCK为低电平相位CPHA=1:SCK第一个边沿发送数据,第二个边沿采集数据SS……SCK……B7B6B0……MOSIB7B6B0……MISOSPI的4种模式交换一个字节(模式2)极性CPOL=1:空闲状态时,SCK为高电平相位CPHA=0:SCK第一个边沿采集数据,第二个边沿发送数据SS……SCK……MOSI……B7B6B0MISO……B7B6B0SPI的4种模式交换一个字节(模式3)极性CPOL=1:空闲状态时,SCK为高电平相位CPHA=1:SCK第一个边沿发送数据,第二个边沿采集数据SS……SCK……B7B6B0……MOSIB7B6B0……MISOSPI的传输顺序LSBFirst最低有效位先行MSBFirst最高有效位先行SPI外设简介STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担可配置8位/16位数据帧、高位先行/低位先行时钟频率:fPCLK/(2,4,8,16,32,64,128,256)支持多主机模型、主或从操作可精简为半双工/单工通信支持DMA兼容I2S协议STM32F103C8T6硬件SPI资源:SPI1、SPI2SPI框图TDRRDRSPI的HAL库函数函数名功能描述HAL_SPI_Init()SPI初始化,配置SPI接口参数HAL_SPI_MspInit()SPI的MSP初始化弱函数,重新实现时一般用于SPI接口引脚GPIO初始化和中断设置HAL_SPI_GetState()返回SPI接口当前状态,返回值是枚举类型HAL_SPI_StateTypeDefHAL_SPI_GetError()返回SPI接口最后的错误码,错误码有一组宏定义HAL_SPI_Transmit()阻塞式发送一个缓存区的数据HAL_SPI_Receive()阻塞式接收指定长度的数据到缓存区HAL_SPI_TransmitReceive()阻塞式同时发送和接收一定长度的数据SPI的HAL库函数函数名函数功能中断事件类型对应的回调函数HAL_SPI_Transmit_IT()中断方式发送一个缓存区的数据SPI_IT_TXEHAL_SPI_TxCpltCallback()HAL_SPI_Receive_IT()中断方式接收指定长度的数据到缓存区SPI_IT_RXNEHAL_SPI_RxCpltCallback()HAL_SPI_TransmitRecei

ve_IT()中断方式发送和接收一定长度的数据SPI_IT_TXE和SPI_IT_RXNEHAL_SPI_TxRxCpltCallback()前3个中断方式传输函数前3个中断模式传输函数

都可能产生SPI_IT_ERR中断事件SPI_IT_ERRHAL_SPI_ErrorCallback()HAL_SPI_IRQHandler()SPI中断ISR函数里调用的

通用处理函数------HAL_SPI_Abort()取消非阻塞式数据传输,本函数以阻塞模式运行------HAL_SPI_Abort_IT()取消非阻塞式数据传输,本函数以中断模式运行---HAL_SPI_AbortCpltCallback()SPI的HAL库函数DMA方式功能函数函数功能DMA流中断事件对应的回调函数HAL_SPI_Transmit

_DMA()DMA方式发送数据DMA传输完成HAL_SPI_TxCpltCallback()DMA传输半完成HAL_SPI_TxHalfCpltCallback()HAL_SPI_Receive

_DMA()DMA方式接收数据DMA传输完成HAL_SPI_RxCpltCallback()DMA传输半完成HAL_SPI_RxHalfCpltCallback()HAL_SPI_Transmit

Receive_DMA()DMA方式发送/

接收数据DMA传输完成HAL_SPI_TxRxCpltCallback()DMA传输半完成HAL_SPI_TxRxHalfCpltCallback()前3个DMA方式传输

函数前3个DMA方式传输函数都可能产生DMA传输错误中断事件DMA传输错误HAL_SPI_ErrorCallback()SPI通信示例创建项目Demo8_1_Flash,根据下图连接电路,为W25Q64编写常用操作的驱动程序,并且测试轮询方式读写W25Q64。示例功能与操作流程如下:使能SPI1接口并移植W25Q64常用功能的驱动程序。编写程序测试读取芯片ID,FLASH擦除,写入数据和读出数据等操作。W25Q64简介W25Q64简介SPI通信示例SPI通信示例

将厂家提供的驱动程序flash.c与flash.h加入到工程中,在flash.c中定义了4个SPI基本发送和接收函数,用于发送1字节或多字节,接收1字节或多字节,这4个函数的实现代码如下:SPI通信示例SPI通信示例TIM简介TIM(Timer)定时器,定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能STM32F103有2个高级控制定时器(Advanced-control

timer),4个通用定时器(General-purposetimer),2个基础定时器(Basictimer)。定时器特性定时器类型定时器计时器长度计数类型DMA请求捕获/比较通道所在总线基础TIM6、TIM716向上有0APB1通用TIM2、TIM3、TIM4、TIM516向上、向下、向上\向下有4APB1高级TIM1、TIM816向上、向下、向上\向下有4APB2基础定时器TIM6和TIM7是基础定时器,它们的功能相同只能使用内部时钟信号CK_INT16位自动重载寄存器(auto-reloadregister,ARR),16位递增计数器CNT,16位可编程预分频器(PSC),分频范围1至65536只有一种事件引起中断,即计数器上溢时产生的更新事件降低频率/(PSC+1)计数设置时钟周期周期=ARR+1时钟来源计数器工作时序计数器计数频率:CK_CNT

=CK_PSC

/(PSC

+1)计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR

+1) =CK_PSC/(PSC

+1)/(ARR

+1)上计数、下计数和中心对齐上计数(CountUp)下计数(CountUp)中心对齐(CenterAlign)课堂练习将TIM3的时基单元设置为分辨率1us,周期1ms,PSC和ARR值怎么设置1us1ms寄存器预加载功能定时器运行过程中突然改变ARR寄存器预加载功能写入生效使能ARR的预加载功能基础定时器HAL库函数分组函数名功能描述初始化HAL_TIM_Base_Init()定时器初始化,设置各种参数和连续定时模式HAL_TIM_Base_MspInit()弱函数,在HAL_TIM_Base_Init()里被调用,需重新实现HAL_TIM_OnePulse_Init()将定时器配置为单次定时模式,需要先执行HAL_TIM_Base_Init()启动和停止HAL_TIM_Base_Start()以轮询工作方式启动定时器,不会产生中断HAL_TIM_Base_Stop()停止轮询工作方式的定时器HAL_TIM_Base_Start_IT()以中断工作方式启动定时器,发生UEV事件时产生中断HAL_TIM_Base_Stop_IT()停止中断工作方式定时器的HAL_TIM_Base_Start_DMA()以DMA工作方式启动定时器HAL_TIM_Base_Stop_DMA()停止DMA工作方式的定时器获取状态HAL_TIM_Base_GetState()获取基础定时器的当前状态其他通用的操作函数函数名功能描述__HAL_TIM_ENABLE()启用某个定时器,就是将定时器控制寄存器TIMx_CR1的CEN位置1__HAL_TIM_DISABLE()禁用某个定时器__HAL_TIM_GET_COUNTER()在运行时读取定时器的当前计数值,就是读取TIMx_CNT寄存器的值__HAL_TIM_SET_COUNTER()在运行时设置定时器的计数值,就是设置TIMx_CNT寄存器的值__HAL_TIM_GET_AUTORELOAD()在运行时读取自重载寄存器TIMx_ARR的值__HAL_TIM_SET_AUTORELOAD()在运行时设置自重载寄存器TIMx_ARR的值,并改变定时的周期__HAL_TIM_SET_PRESCALER()在运行时设置与分频系数,就是设置分频寄存器TIMx_PSC的值中断处理相关函数函数名功能描述__HAL_TIM_GET_FLAG()获取某个事件是否触发的标志,就是读取状态寄存器TIMx_SR中相应的中断事件位是否置1__HAL_TIM_GET_IT_SOURCE()判断是否是某个事件产生的中断,返回值为SET或

RESET__HAL_TIM_CLEAR_IT()清除某个事件的中断标志,就是将状态寄存器TIMx_SR中相应的中断事件位是否置0__HAL_TIM_ENABLE_IT()启用某个事件的中断,就是将中断使能寄存器TIMx_DIER中相应事件位置1__HAL_TIM_DISABLE_IT()禁用某个事件的中断,就是将中断使能寄存器TIMx_DIER中相应事件位置0HAL_TIM_IRQHandler()定时器ISR函数里的通用处理函数HAL_TIM_PeriodElapsedCallback()弱函数,UEV事件中断的回调函数基本定时器示例将TIM1配置为连续定时模式,定时周期设为1s,并通过中断方式启动TIM1,在更新事件(UEV)的中断回调函数中切换LED1的状态。将TIM2配置为单次定时模式,定时周期设为5s,并通过中断方式启动TIM2,在更新事件(UEV)的中断回调函数中切换LED2的状态。基本定时器示例基本定时器示例实现微秒级延时函数输出比较简介OC(OutputCompare)输出比较,可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能通用定时器高级定时器PWM简介PWM(PulseWidthModulation)脉冲宽度调制,是一种用数字开关信号(通/断)的占空比变化,等效控制模拟量(电压、功率、亮度、转速等)的电子控制技术。PWM参数:

频率=1/TS

占空比=TON/TS

分辨率=占空比变化步距PWM简介PWM频率:

Freq=CK_PSC/(PSC

+1)/(ARR

+1)PWM占空比:

Duty=CCR/(ARR

+1)PWM分辨率:

Reso=1/(ARR

+1)输出比较通道(通用)模式选择极性选择输出使能输出比较模式极性选择选择正常输出的极性选择互补输出的极性输出比较通道(高级)正常输出互补输出PWM相关HAL库函数函数名功能描述HAL_TIM_PWM_Init()生成PWM波的配置初始化,需先执行HAL_TIM_Base_Init()进行定时器初始化HAL_TIM_PWM_ConfigChannel()配置PWM输出通道HAL_TIM_PWM_Start()启动生成PWM波,需要先执行HAL_TIM_Base_Start()启动定时器HAL_TIM_PWM_Stop()停止生成PWM波HAL_TIM_PWM_Start_IT()以中断方式启动生成PWM波,需要先执行HAL_TIM_Base_Start_IT()启动定时器HAL_TIM_PWM_Stop_IT()停止生成PWM波HAL_TIM_PWM_GetState()返回定时器状态,与HAL_TIM_Base_GetState()功能相同__HAL_TIM_ENABLE_OCxPRELOAD()使能CCR寄存器的预装载功能,为CCR设置的新值在下个UEV事件发生时才更新到CCR寄存器__HAL_TIM_DISABLE_OCxPRELOAD()禁止CCR寄存器的预装载功能,为CCR设置的新值立刻更新到CCR寄存器__HAL_TIM_ENABLE_OCxFAST()启用一个通道的快速模式__HAL_TIM_DISABLE_OCxFAST()禁用一个通道的快速模式HAL_TIM_PWM_PulseFinishedCallback()当计数器的值等于CCR寄存器的值时产生输出比较事件,这是对应的回调函数定时器中断事件中断事件类型事件名称回调函数TIM_IT_CC1CC1通道输入捕获HAL_TIM_IC_CaptureCallback(htim)CC1通道输出比较HAL_TIM_OC_DelayElapsedCallback(htim);HAL_TIM_PWM_PulseFinishedCallback(htim);TIM_IT_CC2CC2通道输入捕获HAL_TIM_IC_CaptureCallback(htim)CC2通道输出比较HAL_TIM_OC_DelayElapsedCallback(htim);HAL_TIM_PWM_PulseFinishedCallback(htim);TIM_IT_CC3CC3通道输入捕获HAL_TIM_IC_CaptureCallback(htim)CC3通道输出比较HAL_TIM_OC_DelayElapsedCallback(htim);HAL_TIM_PWM_PulseFinishedCallback(htim);TIM_IT_CC4CC4通道输入捕获HAL_TIM_IC_CaptureCallback(htim)CC4通道输出比较HAL_TIM_OC_DelayElapsedCallback(htim);HAL_TIM_PWM_PulseFinishedCallback(htim);TIM_IT_UPDATE更新事件(UEV)HAL_TIM_PeriodElapsedCallback(htim);TIM_IT_TRIGGERTRGI触发事件HAL_TIM_TriggerCallback(htim);TIM_IT_BREAK短路输入事件HAL_TIMEx_BreakCallback(htim);TIM_IT_COM换相事件HAL_TIMEx_CommutCallback(htim);生成PWM示例使用TIM2的通道CH1先输出固定占空比的PWM波,然后通过修改程序输出可变占空比的PWM波,实现呼吸灯效果输出PWM示例输出比较示例(翻转模式)利用TIM2_CH1的输出比较功能中的翻转模式,控制PA0引脚间隔500ms进行电平翻转,从而使LED1闪烁输出比较示例(翻转模式)输入捕获简介IC(InputCapture)输入捕获,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWMI模式,同时测量频率和占空比可配合主从触发模式,实现硬件全自动测量频率测量闸门时间T标准频率fc中界频率fm计次N计次N

输入捕获通道输入滤波边沿检测信号选择分频直接间接PWMI工作原理CNT++CCR1=CNT↑↓CNT++CCR2=CNTCNT会一直累加到ARR才溢出清零通道1捕获上升沿通道2捕获下降沿从模式控制器TRGI(TriggerInput)触发输入TRGO(TriggerOutput)触发输出从触发模式TRGIITR0ITR1ITR2ITR3TI1F_EDTI1FP1TI2FP2ETRF触发源选择8种从模式Closed:禁止,不通过TRGI接收控制信号Encoder1:编码器模式1Encoder2:编码器模式2Encoder3:编码器模式3Reset:复位模式,TRGI的上升沿对CNT清零Gated:门模式,TRGI=高,总开关闭合;TRGI=低,总开关断开Trigger:触发模式,TRGI上升沿闭合总开关External1:外部时钟模式1,TRGI作为时基单元的时钟来源主触发模式8种主模式TRGOReset:复位,手动产生Update事件时TRGO输出脉冲Enable:使能,总开关闭合,TRGO=1;反之TRGO=0Update:每个Update事件,TRGO输出脉冲OC1:比较脉冲OC1REF:OC1REF作为TRGOOC2REF:OC2REF作为TRGOOC3REF:OC3REF作为TRGOOC4REF:OC4REF作为TRGO输入捕获示例利用定时器TIM2的CH1通道来输出PWM信号,该通道对应的引脚是PA0,也就是与LED1相连的引脚。同时使用Key1和Key2按键调整输出PWM信号的脉宽。利用定时器TIM1的PWM输入功能来测量PWM信号的参数。TIM1的输入通道TIM1_CH1复用的是引脚PA8。如下图所示,需要用杜邦线将PA0和PA8两个引脚相连。输入捕获示例输入捕获示例输入捕获示例增量型旋转编码器顺时针旋转逆时针旋转上升沿

下降沿低电平

高电平上升沿

下降沿高电平

低电平增量型旋转编码器360°÷20=18°/pulse捕获到脉冲数量就能计算出旋转的角度编码器接口注意:编码器接口会对上升沿和下降沿都计数,所以实际的脉冲数=计数值

÷2编码器使用示例将旋转编码器的AB两相输出与PA8(TIM1_CH1)和PA9(TIM1_CH2)相连接旋转旋钮调节小灯亮度在OLED上显示小灯亮度进度条编码器使用示例编码器模式对哪个通道进行计数极性选择,是否反向计数方向不对时可以调转一下2分频编码器使用示例ADC简介ADC(Analog-DigitalConverter)模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁12位逐次逼近型ADC,1us转换时间输入电压范围:0~3.3V,转换结果范围:0~409518个输入通道,可测量16个外部和2个内部信号源规则组和注入组两个转换单元模拟看门狗自动监测输入电压范围STM32F103C8T6

ADC资源:ADC1、ADC2,10个外部输入通道逐次逼近ADC原理二分比较确定电压值分辨率:12位ADC00000000000010000000000011111111111100V20481.65V40953.3V逐次逼近型ADC采样保持电路电压发生器DAC+-参考电压3.3V0.9V1000000000001.65V0100000000000.825V0110000000001.238V0101000000001.036V...............0100010111000.899VADC多路复用原理12位逐次逼近型ADC结果寄存器模拟信号1模拟信号2模拟信号n....................ADC框图软件启动控制位软件启动控制位注入序列的特点:通道更少每个通道有单独的结果寄存器优先级更高输入通道ADC中断事件:EOC规则通道转换结束JEOC注入序列转换结束AWD模拟看门狗输入通道通道ADC1ADC2ADC3通道0PA0PA0PA0通道1PA1PA1PA1通道2PA2PA2PA2通道3PA3PA3PA3通道4PA4PA4PF6通道5PA5PA5PF7通道6PA6PA6PF8通道7PA7PA7PF9通道8PB0PB0PF10通道9PB1PB1通道10PC0PC0PC0通道11PC1PC1PC1通道12PC2PC2PC2通道13PC3PC3PC3通道14PC4PC4通道15PC5PC5通道16温度传感器通道17内部参考电压采样时间和转换时间采样时间:开关闭合的时间(采样+保持)转换时间:对采样点进行转换所消耗的时间(量化+编码)STM32

ADC的总转换时间为: TCONV=采样时间+12.5个ADC周期例如:当采样时间为1.5个ADC周期,ADCCLK=14MHz,则1个ADC周期为1/14μs TCONV=1.5+12.5=14个ADC周期=1μs数据对齐与转换结果数据右对齐:数据左对齐:ADC转换的结果是一个数字量,与实际的模拟电压之间的计算关系由VREF+和转换精度位数确定。例如转换精度为12位,VREF+=3.3V,ADC转换结果为12位数字量对应的整数X,则实际电压为Voltage

=

mV校准ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差建议在每次上电后执行一次校准启动校准前,ADC必须处于关电状态超过至少两个ADC时钟周期ADC的HAL库函数分组函数名功能描述初始化和配置HAL_ADC_Init()ADC的初始化,设置ADC的总体参数HAL_ADC_MspInit()ADC初始化的MSP弱函数,在HAL_ADC_Init()里被调用HAL_ADC_ConfigChannel()ADC常规通道配置,一次配置一个通道HAL_ADC_AnalogWDGConfig()模拟看门狗配置HAL_ADC_GetState()返回ADC当前状态HAL_ADC_GetError()返回ADC的错误码轮询方式转换HAL_ADC_Start()启动ADC,并开始常规通道的转换HAL_ADC_Stop()停止常规通道的转换,并停止ADCHAL_ADC_PollForConversion()轮询方式等待ADC常规通道转换完成HAL_ADC_GetValue()读取常规通道转换结果寄存器的数据中断方式转换HAL_ADC_Start_IT()开启中断,开始ADC常规通道的转换HAL_ADC_Stop_IT()关闭中断,停止ADC常规通道的转换HAL_ADC_IRQHandler()ADC中断ISR函数里调用的ADC中断通用处理函数DMA方式转换HAL_ADC_Start_DMA()开启ADC的DMA请求,开始ADC常规通道的转换HAL_ADC_Stop_DMA()停止ADC的DMA请求,停止ADC常规通道的转换ADC的HAL库函数中断事件类型中断事件回调函数ADC_IT_EOC规则通道转换结束(EOC)事件HAL_ADC_ConvCpltCallback()ADC_IT_AWD模拟看门狗触发事件HAL_ADC_LevelOutOfWindowCa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论