STM32-(ADC,DMA,重映射)

发布者:EnchantedDreams最新更新时间:2022-01-12 来源: eefocus关键字: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实现引脚的重新映射。这时的复用功能不再存在原来的引脚上面了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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


关键字:STM32  ADC  DMA  重映射 引用地址:STM32-(ADC,DMA,重映射)

上一篇:STM32-(SysTick定时器,EXTI外部中断/事件控制器)
下一篇:STM32的SWD使用说明

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved