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,重映射)相关推荐

  1. stm32学习日记--重映射

    目录 前言 重映射 操作方法 代码 总结 前言 今天学习了重映射,故输出一篇学习日记去增强理解. 重映射 优点 1:把一个管脚的功能转移到另一个管脚上面,布线更简单. 优点 2:无缘无故增加了功能的数 ...

  2. STM32端口重映射

    笔者在使用STM32F103C8T6时,不能使用TIM3输出2路PWM波的问题分析和解决办法. PS. PB4(部分重映射,TIM3_CH1) ,PB5(部分重映射,TIM3_CH2) STM32的端 ...

  3. 使用stm32 定时器TIM3 的重映射引脚 捕获正交编码器数据的一些积累

    关注+星标公众号,及时获取更多技术分享~  作者 | 冰茶奥利奥 微信公众号 | 嵌入式电子创客街 因为我们公司的软件和硬件是分开的,硬件人员在设计电路板的时候,为了布线方便,往往会使用一些引脚的重映 ...

  4. STM32中重映射的功能和机理

    在STM32系列微控制器中,GPIO端口具有多种功能,如输入.输出.模拟输入/输出等.为了提高GPIO的灵活性和可用性,STM32系列微控制器提供了重映射(Remap)功能. 重映射功能允许将一个GP ...

  5. STM32——端口复用与重映射

    目录 端口复用的概念 内置外设的概念 端口复用的概念 端口复用的配置 配置示例(串口1) 复用GPIO的配置 STM32中文参考手册 110页 端口重映射概念 端口重映射概念 部分重映射 完全重映射 ...

  6. stm32 TIM2 重映射

    stm32的TIM2的端口使用组合有下面四种: 1.当不重映射时,默认TIM2四个的IO口是PA0.PA1.PA2.PA3 2.要使用PA15.PB3.PA2.PA3的端口组合,要调用下面的语句进行部 ...

  7. stm32之端口复用和重映射

    文章目录 端口复用 端口重映射 端口复用 WHAT IS 端口复用? 一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用 端口复用配置过程(以串口1位例 ...

  8. STM32 基础系列教程 13 – ADC DMA

    前言 学习stm32 adc模数转换接口使用,学会用STM32对模拟信号时行采样,通过DMA方式得到ADC结果. 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 ST ...

  9. STM32 ADC 同步规则模式 ADC1与ADC2同用一个DMA

    STM32 ADC 支持同步规则模式 ,其官方解释为: 大致意思就是通道组的 ADC1 的多路开关(由 ADC1_CTLR2寄存器的 ETSRC[2:0]决定), ADC2 被同步触发.在 ADC1 ...

最新文章

  1. Java设计模式(二十二):原型设计模式
  2. Synchronize对String加锁
  3. Jmeter设置变量与引用变量(三)
  4. wxWidgets:wxRegEx类用法
  5. 《Linux内核设计与实现》读书笔记(十二)- 内存管理
  6. 基于接缝裁剪的图像压缩 算法导论
  7. 天池 在线编程 旅行计划(暴力回溯)
  8. Java 线程实例一(查看线程是否存活、获取当前线程名称、状态监测、线程优先级设置、死锁及解决方法、获取线程id、线程挂起)
  9. java基础—IO流——将一些字符写入到指定硬盘上的目录中去:
  10. C++虚函数及虚函数表解析
  11. 习题:交换一组数据的位置
  12. 串口-TCP调试助手
  13. 数据分析 第七篇:方差分析(单因素方差分析)
  14. 番外4:自动进行功放输出阻抗匹配设计(匹配至4次谐波)
  15. http下载异常_用了这么久HTTP, 你是否了解Content-Length?
  16. 秒杀项目的总结及面试常见问题
  17. “中国童装之都”牵手九州云,共建智慧园区促产业转型
  18. 【Vivado那些事儿】强制修改打开Vivado工程使用的Vivado版本
  19. Golang项目 Go Build时报错
  20. 《中国人的紧箍咒》,你一定要支持的理由——

热门文章

  1. LNMP环境搭建(用阿里云epel源安装)
  2. Detection of Malicious Code Variants Based on Deep Learning--论文
  3. Qcom平台 Camera 之常见错误和问题
  4. 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
  5. [Usaco2008 Open]Crisis on the Farm 牧场危机
  6. 张欲莎-老公,不要停。。。
  7. 功率放大器驱动容性负载、感性负载,有哪些注意事项?
  8. 计算机体系结构的主要原理,《计算机组成原理》计算机体系结构.pdf
  9. 2026. 低质量的问题
  10. 计算机信息系统审计简报,审计简报范文审计报告写.doc