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学习日记--重映射
目录 前言 重映射 操作方法 代码 总结 前言 今天学习了重映射,故输出一篇学习日记去增强理解. 重映射 优点 1:把一个管脚的功能转移到另一个管脚上面,布线更简单. 优点 2:无缘无故增加了功能的数 ...
- STM32端口重映射
笔者在使用STM32F103C8T6时,不能使用TIM3输出2路PWM波的问题分析和解决办法. PS. PB4(部分重映射,TIM3_CH1) ,PB5(部分重映射,TIM3_CH2) STM32的端 ...
- 使用stm32 定时器TIM3 的重映射引脚 捕获正交编码器数据的一些积累
关注+星标公众号,及时获取更多技术分享~ 作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 因为我们公司的软件和硬件是分开的,硬件人员在设计电路板的时候,为了布线方便,往往会使用一些引脚的重映 ...
- STM32中重映射的功能和机理
在STM32系列微控制器中,GPIO端口具有多种功能,如输入.输出.模拟输入/输出等.为了提高GPIO的灵活性和可用性,STM32系列微控制器提供了重映射(Remap)功能. 重映射功能允许将一个GP ...
- STM32——端口复用与重映射
目录 端口复用的概念 内置外设的概念 端口复用的概念 端口复用的配置 配置示例(串口1) 复用GPIO的配置 STM32中文参考手册 110页 端口重映射概念 端口重映射概念 部分重映射 完全重映射 ...
- stm32 TIM2 重映射
stm32的TIM2的端口使用组合有下面四种: 1.当不重映射时,默认TIM2四个的IO口是PA0.PA1.PA2.PA3 2.要使用PA15.PB3.PA2.PA3的端口组合,要调用下面的语句进行部 ...
- stm32之端口复用和重映射
文章目录 端口复用 端口重映射 端口复用 WHAT IS 端口复用? 一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用 端口复用配置过程(以串口1位例 ...
- STM32 基础系列教程 13 – ADC DMA
前言 学习stm32 adc模数转换接口使用,学会用STM32对模拟信号时行采样,通过DMA方式得到ADC结果. 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 ST ...
- STM32 ADC 同步规则模式 ADC1与ADC2同用一个DMA
STM32 ADC 支持同步规则模式 ,其官方解释为: 大致意思就是通道组的 ADC1 的多路开关(由 ADC1_CTLR2寄存器的 ETSRC[2:0]决定), ADC2 被同步触发.在 ADC1 ...
最新文章
- Java设计模式(二十二):原型设计模式
- Synchronize对String加锁
- Jmeter设置变量与引用变量(三)
- wxWidgets:wxRegEx类用法
- 《Linux内核设计与实现》读书笔记(十二)- 内存管理
- 基于接缝裁剪的图像压缩 算法导论
- 天池 在线编程 旅行计划(暴力回溯)
- Java 线程实例一(查看线程是否存活、获取当前线程名称、状态监测、线程优先级设置、死锁及解决方法、获取线程id、线程挂起)
- java基础—IO流——将一些字符写入到指定硬盘上的目录中去:
- C++虚函数及虚函数表解析
- 习题:交换一组数据的位置
- 串口-TCP调试助手
- 数据分析 第七篇:方差分析(单因素方差分析)
- 番外4:自动进行功放输出阻抗匹配设计(匹配至4次谐波)
- http下载异常_用了这么久HTTP, 你是否了解Content-Length?
- 秒杀项目的总结及面试常见问题
- “中国童装之都”牵手九州云,共建智慧园区促产业转型
- 【Vivado那些事儿】强制修改打开Vivado工程使用的Vivado版本
- Golang项目 Go Build时报错
- 《中国人的紧箍咒》,你一定要支持的理由——
热门文章
- LNMP环境搭建(用阿里云epel源安装)
- Detection of Malicious Code Variants Based on Deep Learning--论文
- Qcom平台 Camera 之常见错误和问题
- 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
- [Usaco2008 Open]Crisis on the Farm 牧场危机
- 张欲莎-老公,不要停。。。
- 功率放大器驱动容性负载、感性负载,有哪些注意事项?
- 计算机体系结构的主要原理,《计算机组成原理》计算机体系结构.pdf
- 2026. 低质量的问题
- 计算机信息系统审计简报,审计简报范文审计报告写.doc