本次更新内容为STM32CubeMX生成STM32H7 工程项目应用中Pinout&Configuration关于Timer 和Connectivity部分说明,文中Tips是比较易出错的点,多多关注。欢迎关注本公众“硬件开发不完全攻略”,上传可能中可能有些图片可能分辨率有降低,后台回复“STM32”,获取源文档。
配置主界面
1.3.1RTC
1.3.2TIM
1.3.2.1功能要点
1)OVERVIEW
有shadow register
2)Conter modes
3)Capture/compare
此功能可用于硬件测频,可以使程序简化一些,避免GPIO中断中记录TIMER值。应该也可以避免将此中断优先级设置的比较高。
1.3.2.2各定时器功能特点列表及应用功能分配
以PMC-751X装置应用为例,介绍各个定时器的应用功能分配。PMC-751X一共用了8个定时器(不包括sysTick),其中有AD采样起动定时器、MS/5MS/20MS定时器、捕捉功能定时器(用于硬件测频)、PWM功能定时器(AO功能),比较有代表性。
功能 |
是否支持触发AD |
||||
sysTick |
CubeMX默认配置的是1000Hz(1ms/TICK) |
||||
High-Resolution Timer |
HRTIM |
6 * 16 |
是 |
||
Advanced-control timers |
TIM1 |
16-bit auto-reload Measuring the pulse lengths of input signals(input copture) Output waveforms(PWM) |
是 |
触发AD 亚微秒级定时 以50HZ为例: 64点采样 312.5US 128点采样 156.25US 256点采样 78.125US 所以,此定时器规划为分辨率达到NS级的定时器 |
|
TIM8 |
是 |
Input Capture direct 硬件测频 |
|||
General-purpose timers |
TIM2 |
16-bit/32-bit auto-reload Measuring the pulse lengths of input signals(input copture) Output waveforms(PWM) |
是 |
AO PWM |
|
TIM3 |
是 |
Input Capture direct 硬件测频 |
|||
TIM4 |
是 |
||||
TIM5 |
32位定时器自由走时,可用于测频计时,使更准一些。用于PQ时,可以避免AD定时误差带来的其他问题,减少复杂处理 TIMER时钟频率:50M |
||||
General-purpose timers |
TIM12 |
16-bit auto-reload Measuring the pulse lengths of input signals(input copture) Output waveforms(PWM) |
1 ms定时中断 |
||
TIM13 |
5msms定时中断 |
||||
TIM14 |
20ms定时中断 |
||||
General-purpose timers |
TIM15 |
16-bit auto-reload Measuring the pulse lengths of input signals(input copture) Output waveforms(PWM) |
是 |
||
TIM16 |
|||||
TIM17 |
|||||
Basic timers |
TIM6 |
16-bit auto-reload Drive the DAC |
是 |
||
TIM7 |
|||||
Low-power timer |
LPTIM |
是 |
|||
1.3.2.3普通定时功能配置
普通定时器功能,主要用于定时功能,产生定时中断,或者触发AD采样。需要有动态调整定时器溢出值功能。使用配置比较简单。如果用于触发AD采样,可以直接配置硬件触发,不需要在定时器中断服务程序,写代码起动AD采样。所以,也不需要开启中断。
Tips1:Prescaler分频系数,如果要2分频,则此处应该配置为1;
Tips2:注意需要使能auto-reload preload;
Tips3:Counter Period(AutoReload Register) = 计算值 – 1.例如:分频后定时器实际时钟为50M,需要1MS定时,此值应该设置为:50 000 000 / 1000 – 1 = 49999;
1.3.2.4捕捉功能配置
捕捉功能可用于测量一个脉冲的宽度,例如可用于硬件测频,IRIG-B码解析等。时钟频率要根据脉冲的宽度来设置合适的时钟频率,最好能够避免在一个脉冲宽度内,发生RELOAD,这样的话还需要使能TIMER_UPDATE中断,计翻转次数。
1.3.2.5PWM功能配置
PWM一般用于实现AO功能,通过设置PWM占空比,实现AO输出的电流大小。此定时器的Counter Period(AutoReload Register)要根据硬件电路设计要求的PWM频率来设置(当前常见的设计是100Hz)。
PWM Generation Channel几个主要配置项说明:
Tips1:Mode选择 PWM mode 1(具体各种模式有何差别,查芯片手册);
Tips2:Pulse设置初始化时PWM的占空比,如下图中的配置,占空比为:500/50000 = 1%。具体要设置多少,需要保证此时输出的AO电流值小于4MA;
Tips3:CH Polarity 配置占空比对应的电平:高/低。根据硬件电路设计进行设置,如果硬件电路设计低电平时AO电流输出,此处配置为LOW,反之配置为HIGH;
Tips4:Output compare preload需要使能。
1.4.1I2C
1.4.1.1功能要点
1.4.1.2配置
Standard Mode模式下,I2C总线最大频率只能到100K,如果需要大于100K,则需要配置为Fast Mode。Standard Mode模式下,自动配置完成后,I2C总线的SCL时钟信号,高低电平时间比大概是:6:4。
Fast Mode模式下,CUBEMX自动生成的代码,SCL占空比比较悬殊,其应该是完全按照I2C FAST模式要求来配置的,无论是200K还是400K,高电平时间基本都是0.8US。对比RTC8025、FM24也满足他们的要求,但是对于低速情况下,高电平裕度显得不太够。所以,直接手动改一下占空比设置。高低电平时间按4:6来配置。因为低电平期间,从设备需要准备数据,时间相对需要的长一些。
比如:I2C的工作频率为20M的频率,总线200K,TIMEING最后两个字节应该分别是(40 -1)和(60-1),但是设置了数据建立时间和滤波后,会导致总线实际频率会小一些,这个就没太大关系了。
Tips1:Fast Mode模式下,注意手动调整一下Timing,使SCL时钟的高低电平百分比更合理一些;
Tips2:Rise Time注意要落实一下满足器件的最小建立时间,但是在SCL时钟高低电平百分比不悬殊的情况下,一般肯定可以满足;
Tips3:注意Address Length selection的选择要与器件一致;
1.4.2SPI
1.4.2.1功能要点
SSI(Synchronous Serial Interface)由TI公司定义的接口协议标准;SPI(Serial Peripheral Interface)是由Motorola公司定义的接口协议标准;两者的用法有类似的地方。SPI串行帧帧同步SSIFss为低电平有效,在整个帧传输期间生效;SSI串行帧同步SSIFss在发送每个帧之前产生宽度为一个时钟周期的高脉冲。SSI模块和片外从设备都在SSICLK的上升沿驱动输入数据,在SSICLK的下降沿锁存另一端的输入数据。
Motorola的叫SPI协议,TI的叫SSP协议。
1.4.2.2配置
Tips1:CS信号是软件控制还是硬件控制:软件。原因:对于常见的SPI设备:Flash/FRAM,其读写时序一般都是先发命令和地址,直接再发数据,而应用层在操作Flash/FRAM时,地址和数据一般都是分开的。为了避免应用层/驱动层将命令、地址、数据先整合拷贝到一个数组中,驱动中最好能够支持命令、地址、数据的分开单独写入。STM32H7XX的HAL库没有做类似的接口。只有软件控制CS信号,才能方便地通过STM32H7XX的HAL库中已有函数来实现Flash/FRAM的操作;
Tips2:Frame Format:Motorola,根据器件要求设置SPI的工作模式MODE 0/1/2/3(CPOL、CPHA);
Tips3:Master Keep Io State一定要设置为Enable,否则每次调用STM32H7XX的HAL库提供的SPI的Transmit/Receive/Transmit Receive后,库函数中都会将SPI模块DISABLE,导致SPI的四个信号不再受SPI模块控制,从而导致时序不对(尤其是CS为软件控制时)、信号质量差;
1.4.3UART
1.4.3.1功能要点
1.4.3.2配置
Tips1:如下图1,4,Hardware Flow Control,推荐使用硬件。同时根据硬件电路设计情况(低收高发/高发低收),设置Polarity为对应的High/Low,这个Polarity对应的是发送时DE信号的电平;
Tips2:Word Length,如果是8N1,此处应配置为8。如果是8E1/8O1,此处应配置为9;
Tips3:注意需将FIFO、DMA、中断全部使能,保证其生成对应的基础代码。具体应用时,是否用DMA、FIFO,可根据实际需要调用不同的接口函数;
Tips4:CubeMX中没有RTO的设置,通过HAL中相关的函数来配置RTO参数和使能/禁止。
1.4.4FDCAN
1.4.5ETH
1.4.5.1功能要点
下面这个TCP segmentation offload还没有太理解,它真正的作用,以及可以解决什么问题。
1.4.5.2配置
Tips1:MAC的收发BUFFER默认配置在0x30040000这块内存中,Tx/Rx Descriptor Length及Address的配置要注意需要留足够的空间能够满足Descriptor的存储。CubeMX也会对此进行检查,我们也可以根据自动生成的代码中的Descriptor结构体来分析确认;
Tips2:下图中调整了Rx Buffers Length的大小,主要考虑是因为我们目前用的最多的是MODBUS TCP,一般没有那么长的数据报文,这里减小Rx Buffers Length,增大Rx Descriptor Length,可以提高系统缓存报文的能力,总BUFFER大小没有变化;