STM32的高级功能应用
高级定时器功能框图
时钟源
高级定时器有四个时钟源可以选择:
1.内部时钟CK_INT
内部时钟源CK_INT主要来源于芯片内部,为72M,一般情况下我们都是使用内部时钟。当从模式控制寄存器TIMx_SMCR的SMS位等于000时则使用内部时钟。
2.外部时钟模式1:外部输入引脚TIx(1,2,3,4)
时钟信号输入引脚共有4个,分别是TI(1,2,3,4),及TIM_CH(1,2,3,4)具体使用那一路信号输入引脚,由TIM_CCMRx的位CCxS[1:0]配置,其中CCMR1控制TI1/2,CCMR2控制TI3/4.
3.外部时钟模式2:外部触发输入ETR
时钟信号来自定时器的特定输入通道TIMX_ETR,只有一个。
4.内部触发输入(ITRx)
内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。主模式的定时器可以对从模式定时器执行复位,启动,停止或提供时钟。
时基单元
高级控制寄存器的时基单元功能包括4个寄存器,分别是计数器寄存器(CNT),预分频控制寄存器(PSC),自动重装载寄存器(ARR)和重复计数器寄存器(RCR)。其中重复计数器RCR是高级定时器独有,通用和基本定时器没有。前面3个寄存器都是16位有效,TIMX_RCR寄存器是8位有效的。
预分频器:psc,有一个输入时钟CK_PSC和一个输出时钟CK_CNT。输入时钟CK_PSC就是上面时钟源的输出,输出CK_CNT这用来驱动CNT计数。通过设置预分频器PSC的值可以得到不同的CK_CNT,实际计算为:fck_cnt=fck_psc/(PSC[15:0]+1);可以实现1到65535分频。
通俗的理解就是:计数一次的时间。
typedef struct{
uint16_t TIM_Prescaler; //预分频器
uint16_t TIM_CounterMode; //计数器模式
uint16_t TIM_Period; //定时器周期
uint16_t TIM_ClockDivision; //时钟分频
uint8_t TIM_RepetitionCounter; //重复计算器
} TIM_TimeBaseInitTypeDef;
例如:
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_Prescaler = 35;>>>t=36/(72M)=1/(2M)
TIM_TimeBaseInitStruct.TIM_Period = 1999;>>>T=1/(2M)*2000=1ms,周期1ms
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_up;>>>向上计数
TIM_TimeBaseInitStruct.TIM_ClockDivision=0;//时钟分频系数为0
TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;//重复计数器
1.ADC采集:独立多通道采集
2.DMA存储:外设(ADC)到存储器
void ADC_Mode_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
//根据DMA1的通道1的请求映像选择通道模式与通道号
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_DeInit(DMA1_Channel1);//采用DMA1中的通道1;
DMA_InitStructure.DMA_PeripheralBaseAddr>>>外设地址
DMA_InitStructure.DMA_Memory0BaseAddr>>>存储器地址,对应的寄存器是:DMA_CMAR;
DMA_InitStructure.DMA_DIR>>>传输方向选择,外设存储器,存储器到外设,对应的寄存器DMA_CCR的DIR[1:0]位的值。
DMA_InitStructure.DMA_BufferSize>>>设定待传输数据的数目,对应寄存器是DMA_CNDTR寄存器的值。
DMA_InitStructure.DMA_PeripheralInc>>>是否使能外设地址自动递增功能,对应寄存器是DMA_CCR中的PINC位的值,一般外设都是只有一个数据寄存器,所以不使能。
DMA_InitStructure.MemoryInc>>> 是否使能存储器地址自动递增功能,对应寄存器是DMA_CCR的MINC位的值,一般是使能的。
DMA_InitStructure.DMA_PeripheralDataSize>>>外设数据宽度,8位,16位,32位,对应寄存器是DMA_CCR中的PSIZE[1:0]位的值。
DMA_InitStructure.MemoryDataSize>>>存储器数据宽带,可选8位,16位,32位对应的寄存器是DMA_CCR中的MSIZE[1:0]位的值。当外设和存储器之间传输数据时,两边的数据宽度应该一致。
DMA_InitStructure.DMA_Mode>>>选择DMA传输模式是一次传输还是循环传输,对应的寄存器是DMA_CCR中的CIRC位的值,由于ADC采集是一个持续循环的状态,所以选用循环模式。
DMA_InitStructure.DMA_Priority>>>软件设置通道的优先级,有4个可选优先级分别是非常高,高,中,低,对应寄存器是DMA_CCR中的PL[1:0]位的值。
DMA_InitStructure.DMA_M2M>>>存储器到存储器模式,对应寄存器是DMA_CCR中的MEN2MEN位。
ADC_DeInit(ADC1);
ADC_InitStructure. ADC_Mode >>>ADC工作模式的选择:独立模式,双模式对应寄存器是:ADC_CR1:DUALMOD位。
ADC_InitStructure. ADC_ScanConvMode >>>是否选用扫描,单通道选择DISABLE,多通道选择ENABLE,对应寄存器是ADC_CR1:SCAN位
ADC_InitStructure. ADC_ContinuousConvMode >>>配置是启动自动连续转换还是单次转换。对应寄存器是ADC_CR2:CON位。
ADC_InitStructure. ADC_ExternalTrigConv >>>外部触发选择,一般选择软件触发,也可以根据项目需求配置触发来源。对应的寄存器是ADC_CR2中的17-20位,EXTTRIG EXTSEL[2:0];
ADC_InitStructure. ADC_DataAlign >>>数据对齐格式,左对齐还是右对齐,一般是右对齐,寄存器是ADC_CR2中的11位,ALIGN;
ADC_InitStructure. ADC_NbrofChannel = AD转换通道的数目,看你需要几个通道,对应寄存器是ADC_CR1中的AWDCH[4:0];
ADC_Init(ADC1,&ADC_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
ADC_RegularChannelConfig(ADC1,ADC_Channel_12,1,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_10,3,ADC_SampleTime_239Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_13,4,ADC_SampleTime_239Cycles5);
ADC_DMACmd(ADC1,ENABLE);//使能ADC的DMA请求;
ADC_Cmd(ADC1,ENABLE);//开启ADC,并开始转换
ADC_ResetCalibration(ADC1);//初始化ADC校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//等待校准初始化完成
ADC_StartCalibration(ADC1);//ADC开始校准
while(ADC_GetCalibrationStatus(ADC1));//等待校准完成
}
ADC触发选择:
ADC通道对应引脚:
3.管脚映射
为了优化64和100脚的封装的外设数目,可以把一些复用功能重映射到其他脚上。设置复用重映射的配置寄存器是AFIO_MAPR实现引脚的重新映射。这时的复用功能不再存在原来的引脚上面了。
设计资源 培训 开发板 精华推荐
- 免费试用+优惠购+任务解锁赢好礼!这个夏天pyboardCN V2畅玩走起!
- 2023 瑞萨电子 MCU/MPU 工业应用技术研讨会
- 有奖评测:50套来自恩智浦全新快速物联网原型设计套件(价值350元)
- 好书共读 | 《控制之美(卷2)——最优化控制MPC与卡尔曼滤波器》
- 国产FPGA有奖直播:安路全新FPSoC产品SF1系列(FPGA+MCU),Demo板介绍和案例解析
- 听说这个夏天看TI MCU视频能赢好礼!
- Vicor可最大限度提高AI、HPC和数据计算性能的电源解决方案
- 有奖直播|TI 符合 USB 2.0 标准的最新隔离器件
- 有奖直播【如何在几分钟之内完成高效可靠的USB PD电源设计——PI Expert™分步教程】(9:30开始入场)