STM32-(ADC,DMA,重映射)

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实现引脚的重新映射。这时的复用功能不再存在原来的引脚上面了。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37272520/article/details/83064280
今日推荐