这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32单片机硬件关键基础操作

共2条 1/1 1 跳转至

STM32单片机硬件关键基础操作

菜鸟
2024-12-18 11:43:53     打赏

STM32硬件关键设计精华集锦

  如何保证ADC精度之STM32的ADC

  共有最多3个ADC模块,最多21个ADC输入通道

  特性

  12位分辨率

  自校准

  转换结束,注入转换结束和发生模拟看门狗事件时产生中断

  带内嵌数据一致的数据对齐

  非常丰富的操作模式

  双重模式(带2个或以上ADC的器件)

  ADC转换时间:

  1μs:ADC时钟为14MHz时达到最快

  14个时钟周期,转换周期可调:14、20、26、41、54、68、84、252

  ADC供电要求:2.4V~3.6V

  ADC输入范围:VREF-≤VIN≤VREF+

  规则通道转换期间有DMA请求产生

  模拟看门狗

ADC输入通道映射


  STM32的双ADC操作模式


ADC的误差种类

 

  (1) 理想ADC转换曲线

  (2) 实际ADC转换曲线

  (3) 实际ADC两终点连线


  ET 总误差:实际ADC转换曲线与理想曲线间的最 大偏离

  EO 偏移误差:实际转换曲 线上第一次跃迁与理想 曲线中第一次跃迁之差

  EG 增益误差:实际转换曲 线上最后一次跃迁与理 想曲线中最后一次跃迁 之差

  ED 微分线性误差:实际转 换曲线上步距与理想步 距(1LSB)之差

  EL 积分线性误差:实际转 换曲线与终点曲线间最 大偏离

消除影响ADC精度的因素(1)

  1、ADC模块自身的误差

  积分线性误差(ILE)和微分线性误差(DLE)依赖于ADC模块的设计,校准它们是困难的。进行多次转换再做平均可以减小它们的影响。偏移和增益误差可以简单地使用ADC模块的自校准功能补偿。

  2、电源噪声,尤其是开关电源(SMPS)的高频噪声

  线性稳压器具有较好的输出。强烈建议在整流输出端连接滤波电容。如果使用开关型电源,建议使用一个线性稳压器为模拟部分供电。建议在电源线和地 线之间连接具有良好高频特性的电容,即在靠近电源一端应放置一个0.1μF和一个1~10μF的电容。每一对VDD和VSS管脚都需要使用单独的去藕电 容。VDDA管脚必须连接到2个外部的去藕电容器(10nF瓷介电容+1μF的钽电容或瓷介电容)对于100脚和144脚封装的产品,可以在VREF+上 连接一个外部的ADC的参考输入电压,从而改善对输入低电压的精度。

  消除影响ADC精度的因素(2)


消除影响ADC精度的因素(3)
 

 

  1、电源输出不稳,随负载变化

  ADC模块使用VREF+或VDDA作为模拟参考,数字数值的输出是这个参考电压与模拟输入信号的比值,VREF+必须在各种负载情况下保持稳定。可以使用诸如LM236作为VREF+的参考电压,这是一个2.5V的电压参考二极管

  2、模拟输入信号的噪声

  平均值方法:适合处理不频繁变化的模拟输入信号,增加一个外部滤波器消除高频噪声。

  3、将最大的信号幅度与ADC动态范围匹配

  选择参考电压(仅适合于具有VREF+引脚的产品),使用一个外部的前级放大器。

  4、I/O引脚间的串扰(临近数字信号的翻转)

  模拟信号线的周围布置地线产生屏蔽,能有效地减小串扰干扰噪声。

  消除影响ADC精度的因素(4)


VDD与VDDA的处理

  供电引脚

  STM32共有7种封装规格,共有多组VDD/VSS引脚,以及一组VDDA/VSSA引脚。


  尽管所有VDD和所有VSS在内部相连,在芯片外部仍然需要连接上所有的VDD和VSS。因为导线较细,内部连接负载能力较差,抗干扰的能力也较差,如果漏接VDD或VSS,容易造成内部线路损坏,同时抗干扰能力下降。

  VDD与VSS的去藕电容

  每对VDD与VSS都必须在尽可能靠近芯片处分别放置一个10nF~100nF的高频瓷介电容。在靠近VDD3和VSS3的地方放置一个4.7μF~10μF的钽电容或瓷介电容。


VDD与VDDA的关系

 

  VDDA为所有的模拟电路部分供电,包括:


  ADC模块,复位电路,PVD(可编程电压监测器),PLL,上电复位(POR)和掉电复位(PDR)模块,控制VBAT切换的开关等。即使不 使用ADC功能,也需要连接VDDA,强烈建议VDD和VDDA使用同一个电源供电。VDD与VDDA之间的电压差不能超过300mV,VDD与VDDA 应该同时上电或调电。

  供电方案


  如何达到最优功耗水准

  低功耗模式


I/O引脚的处理

 

  1、如果需要减小I/O端口的电流消耗,可以根据具体情况配置I/O端口的状态:

  输入端口????配置为浮空输入,带外部上拉的输出端口????配置为推挽输出并输出’1’,,带外部下拉的输出端口????配置为推挽输出并输出’0’。

  2、未用的内部外设:

  保持为关闭和默认的复位状态:

  不要进行重映射,复位寄存器RCC_APB1RSTR和RCC_APB2RSTR。关闭对应的时钟,时钟使能寄存器:RCC_AHBENR、RCC_APB2ENR和RCC_APB1ENR。

  进入SLEEP模式的省电操作

  1、为了降低系统功耗,进入SLEEP模式时,执行如下操作流程:

  关闭无需等待中断或事件的外设时钟;设置进入机制(Sleep-Now或Sleep-on-Exit);设置系统进入SLEEP模式。

  2、退出睡眠模式的方式:

  WFI(等待中断),可由任一外设中断触发,WFE(等待事件),可由任一外设事件触发。

  进入STOP省电模式的操作

  为了降低系统功耗,进入STOP模式的操作流程:

  关闭设置为普通IO功能的GPIO口时钟;

  关闭已开启时钟的外设的使能位(尤其是ADC、DAC、USB等带模拟模块的外设);

  关闭已开启时钟的外设的时钟;

  关闭预取缓冲区,并将Flash等待周期置为0;

  设置PWR_CR中LPDS位选择电压调节器的模式:

  正常模式:电压调节器处于正常供电状态;

  低功耗模式:可降低电压调节器自身的功耗,

  将MCU从STOP模式唤醒的时间有所增加;

  设置系统进入STOP模式。

  退出STOP省电模式的操作

  1、退出停止模式:

  以WFI进入时:任意外部中断线的中断;

  以WFE进入时:任意外部中断线的事件;

  不包括PVD和USB唤醒事件。

  2、从STOP模式恢复后,时钟的配置返回到复位时的状态(系统时钟为HSI),用户程序必须重新配置整个时钟系统,包括PLL。

 如何获得高精度的RTC

  STM32使用Pierce振荡器,原理图及重要参数如下:


三个步骤选择一个合适的LSE

 

  第一步:增益裕量(Gainmargin)计算

  选择一个晶振(参考MCU的数据手册确定晶振的频率)

  计算晶振的增益裕量(Gainmargin)并检查其是否大于5:

  如果Gainmargin《 5,说明这不是一个合适的晶振,应当再挑选一个低ESR值和低CL值的晶振,重新第一步。如果Gainmargin》 5,进行第二步。

  第二步:外部负载电容的计算

  计算CL1和CL2的值,并检查标定为该计算值的电容是否能在市场上获得。如果能找到容值为计算值的电容,则晶振可以在期望的频率正常起振。然后转到第三步。

  如果找不到容值为计算值的电容:

  该应用对频率要求很高,你可使用一个可变电容并将其调整到计算值,然后转到第三步。如果对频率的要求不是特别苛刻,选择市场上能获得的电容中容值距计算值最近的电容。

  第三步:驱动级别及外部电阻的计算

  计算驱动级别DL并检查其是否大于DLcrystal:

  如果DL《 DLcrystal,没必要使用外部电阻,祝贺你,你找到了合适的晶振。如果DL》 DLcrystal,你应该计算RExt 使其确保DL《 DLcrystal 并据此重新计算Gainmargin。如果Gainmargin》 5,祝贺你,你找到了合适的晶振。如果Gainmargin《 5,你别无选择,再重新挑选另外一个晶振吧。然后重新回到第一步。

  ST推荐的LSE型号

  对于STM32™的LSE部分,推荐使用CL《7pF的晶振(过大的CL会导致过大的gmcrit,从而无法保证足够的增益裕量)。


RTC是一个计数器,对输入时钟分频、计数、比较

 


  RTC的校准

  设置BKP_RTCCR寄存器,每220(1048576)个时钟周期中,减去相应周期数,每个单位能实现0.954(1000000/220) ppm的精度校准,BKP_RTCCR寄存器取值范围0-127,时钟可以调慢0 -121 ppm。


  对于32,768Hz晶振,可补偿频偏范围为:32,768Hz 《 fLSE《 32,772Hz ????调慢,设置RTC预分频寄存器RTC_PRLH / RTC_PRLL。

  例如:由预设值32768调整为32766,再设置BKP_RTCCR寄存器,此时,对于32,768Hz晶振,可补偿频偏范围:


复位电路

 

  外部复位信号低脉冲至少保持300ns,系统复位信号不影响备份区域的工作,NRST复位引脚是CMOS工艺的开漏电路。在产生内部复位信号时,NRST引脚会输出一个低电平。


  SWJ调试电路

  SWJ电路设计及注意事项


调试烧录失败的常见原因

 

  1、目标芯片没有正确连接,不能正常工作:

  解决方法:确保目标板的最小系统正确连接,芯片能正常工作:VDD、VDDA及VSS 、VDDS已全部正确连接,复位电路能够可靠复位,各复位源不互相影响。

  2、芯片内原先烧录的代码影响了新的调试操作:

  芯片内原先烧录的代码出错,芯片上电运行,进入未定义状态,不能进入调试模式。芯片内原先烧录的代码启动了某些外设,或者将SWJ引脚配置为普通I/O口。

  解决方法:选择芯片的BOOT0/BOOT1引脚从RAM启动,或先擦除芯片内代码。

  3、芯片已被读/写保护:

  调试工具不能读写芯片内置的Flash。

  解决方法:先使用调试工具解除芯片的读/写保护。
STM32硬件电路设计注意事项

 

  STM32的基本系统主要涉及下面几个部分:

  1、电源

  1)、无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬空;

  2)、对于每组对应的VDD和GND都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠近MCU;

  2、复位、启动选择

  1)、Boot引脚与JTAG无关。其仅是用于MCU启动后,判断执行代码的起始地址;

  2)、在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或电源,切不可悬空;

  3、调试接口

  4、ADC

  1)、ADC是有工作电压的,且与MCU的工作电压不完全相同。MCU工作电压可以到2.0V~3.6V,但ADC模块工作的电压在2.4V~3.6V。设计电路时需要注意。

  5、时钟

  1)、STM32上电默认是使用内部高速RC时钟(HSI)启动运行,如果做外部时钟(HSE)切换,外部时钟是不会运行的。因此,判断最小系统是否工作用示波器检查OSC是否有时钟信号,是错误的方法;

  2)、RTC时钟要求使用的32.768振荡器的寄生电容是6pF,这个电容区别于振荡器外部接的负载电容;

  5、GPIO

  1)、IO推动LED时,建议尽量考虑使用灌电流的方式。

  2)、在Stop等低功耗模式下,为了更省电,通常情况下建议GPIO配置为带上拉的输出模式,输出电平由外部电路决定;

  6、FSMC

  1)、对应100pin或144pin,FSMC的功能与I2C是存在冲突的,如果FSMC时钟打开,I2C 1的硬件模式无法工作。这在STM32F10xxx的勘误表中是有描述的。

  ST官方推荐的几大主流开发板的原理图,在画电路的时候可以做为参考依据:

  1、IAR

  1)、STM32F103RBT6

  2)、STM32F103ZET6

  2、MDK

  1)、STM32F103RBT6

  2)、STM32F103ZET6

  3、Raisonance

  1)、STM32F103RBT6

  2)、STM32F103VET6

  4、ST官方的板

  1)、STM3210E-LK

  2)、STM3210B-EVAL

  3)、STM3210E-EVAL

  4)、STM3210C-EVAL













关键词: STM32     单片机    

院士
2024-12-18 14:48:54     打赏
2楼

ADC的时钟频率与主频的关系,这个平时确实忽略了


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]