STM32 AD交替触发模式程序

发布者:SereneWanderer最新更新时间:2021-04-20 来源: eefocus关键字:STM32  触发模式 手机看文章 扫描二维码
随时随地手机看文章

简介:今天配置了STM32 AD的交替触发模式,采样基本做到1us一个样本了。通道10 1.5周期,使用交替模式,采样时间小于7.5 ADCclock 。

void Adc_Init(u16 period)


{


GPIO_InitTypeDef GPIO_InitStruct;


TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);


GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;


GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;


GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;


GPIO_Init(GPIOC,&GPIO_InitStruct);


RCC->APB2ENR|=1<<9; //ADC1时钟使能


RCC->APB2ENR|=1<<10; //ADC2时钟使能


RCC->APB2RSTR|=1<<9; //ADC1复位


RCC->APB2RSTR&=~(1<<9);//复位结束


RCC->APB2RSTR|=1<<10; //ADC2复位


RCC->APB2RSTR&=~(1<<10);//复位结束


RCC->CFGR&=~(3<<14); //分频因子清零


RCC->CFGR|=2<<14; //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!


ADC1->CR1=0x00070000;


ADC1->CR2=0x00180100;


ADC1->SQR3=0x0000000A;


ADC1->SMPR1=0x00000000;


ADC1->SMPR2=0x00000000;


ADC2->CR1=0x00000000;


ADC2->CR2=0x00180100;


ADC2->SQR3=0x0000000A;


ADC2->SMPR1=0x00000000; //通道10 1.5周期,使用交替模式,采样时间小于7.5 ADCclock


ADC2->SMPR2=0x00000000;


ADC1_DMA_Config((u32)&(ADC_conver),320);


ADC1->CR2|=1<<0; //开启AD转换器


ADC1->CR2|=1<<3; //使能复位校准


while(ADC1->CR2&1<<3); //等待校准结束


ADC1->CR2|=1<<2; //开启AD校准


while(ADC1->CR2&1<<2); //等待校准结束


ADC2->CR2|=1<<0; //开启AD转换器


ADC2->CR2|=1<<3; //使能复位校准


while(ADC2->CR2&1<<3); //等待校准结束


ADC2->CR2|=1<<2; //开启AD校准


while(ADC2->CR2&1<<2); //等待校准结束


TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);


TIM_TimeBaseStructure.TIM_Period =period-1; //计数器值


TIM_TimeBaseStructure.TIM_Prescaler =0;//预分频值,1分频


TIM_TimeBaseStructure.TIM_ClockDivision =0x0; //采样分频72mhz


TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数


TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//初始化定时器结构体


TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);


TIM_Cmd(TIM3,ENABLE);


}


void ADC1_DMA_Config(u32 MemoryAddress,u16 num)


{


DMA_InitTypeDef DMA_InitStructure;


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);


DMA_DeInit(DMA1_Channel1);


DMA_InitStructure.DMA_PeripheralBaseAddr=0x40012400+0x4c;


DMA_InitStructure.DMA_MemoryBaseAddr=MemoryAddress;


DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;


DMA_InitStructure.DMA_BufferSize=num;


DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;


DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh;


DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Word;


DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Word;


DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;


DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;


DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;


DMA_Init(DMA1_Channel1,&DMA_InitStructure);


DMA_Cmd(DMA1_Channel1 ,ENABLE);


}


50k时的波形


100k时


10k时


关键字:STM32  触发模式 引用地址:STM32 AD交替触发模式程序

上一篇:什么是STM32以及怎样学习?
下一篇:STM32串口中断接收方式详细比较

推荐阅读最新更新时间:2024-11-13 06:07

stm32红外遥控的定时器实现
我用的红外遥控是使用的NEC协议,即使用PWM来调制发送的信息 NEC协议,其特征如下: 1、8位地址和8位指令长度; 2、地址和命令2次传输(确保可靠性) 3、PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1”; 4、载波频率为38Khz; 5、位时间为1.125ms或2.25ms; NEC码的位定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉冲+560us低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us
[单片机]
<font color='red'>stm32</font>红外遥控的定时器实现
STM32学习笔记一一USART
1.串口的基本概念 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。 2.串口通信连接 接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输。通过过采样技术来区别数据和
[单片机]
<font color='red'>STM32</font>学习笔记一一USART
STM32软件运行过程,如何查看全局变量的实时数据?
下面是一个单片机STM32RCT6的PA8,PA9,PA10引脚输出PWM波形的仿真步骤,此外还展示了软件运行过程,如何查看全局变量的实时数据。每一步我都做了截图,大家照着一步步来,请大家放心参考! 1.点target图标,如下: 2.选择好单片机芯片的型号:我选的STM32RCT6型号,大家可以根据自己手上stm32开发板的型号来选择 3.外部晶振频率的选择:8Mhz(因为大部分单片机的外部晶振是8Mhz),为了使仿真更贴近实际,通常情况下都是选8Mhz 4.进入Debug页面进行设计,特别要注意第四点parameter,注意选正确好芯片的型号,我的是RC系列,所以写了RC,如果是RB系列,要后面改为RB 5
[单片机]
<font color='red'>STM32</font>软件运行过程,如何查看全局变量的实时数据?
STM32的中断系统理解
STM32中的中断分为异常和中断,STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。 但我 们 一 般 建 议 从 启 动 文 件startup_stm32f10x_hd.s 中查找的,因为不同型号的 STM32 芯片,中断向量表稍微有点区别,在启动文件中,已经有相应芯片可用的全部中断向量。而且在编写中断服务函数时, 需要从启动文件中定义的中断向量表查找中断服务函数名。STM32 的中断如此之多,配置起来并不容易,因此我们需要一个强大而方便的中断控制器 NVI
[单片机]
<font color='red'>STM32</font>的中断系统理解
stm32驱动LCD
(1)头文件的编写方法 示例:// 头文件 file.h #ifndef FILE_H //FILE_H 可以随便写,只是一个标号是为了防止头文件重复定义 #define FILE_H //要和上面的这个一样, void fun(); void fun1(); void fun2(); void fun3(); .......... .......... #endif
[单片机]
STM32下DS18B20的驱动
折腾了一晚上,才把DS18B20的驱动移植到STM32上来。以前在51上使用过单个和多个连接的DS18B20,有现成的程序了,以为很快就能弄好,结果还是被卡住了,下面说下几个关键点吧: 首先是延时的问题,STM32上若用软件延时的话不太好算时间,所以要么用定时器要么用SysTick这个定时器来完成延时的计算。相比之下用SysTick来的简单方便点。 接着是STM32 IO脚的配置问题,因为51是双向的IO,所以作为输入输出都比较方便。STM32的IO是准双向的IO,网上查了下资料,说将STM32的IO配置成开漏输出,然后外接上拉即可实现双向IO。于是我也按规定做了,但调了老半天都不成功,是因为DS18B20没有响应的信号。
[单片机]
STM32使用串口IDLE中断的两种接收不定长数据的方式
现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE中断一次只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE空闲中断的方式接收一帧数据,方法如下: 方法1:实现思路:采用STM32F103的串口1,并配置成空闲中断IDLE模式且使能DMA接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成之后,当外部给单片机发送数据的时候,假设这帧数据长度是200个字节,那么在单片机接收到一个字节的时候并不会产生串口中断,而是DMA在后台把数据默默地搬运到你指定的缓冲区里面。当整帧数据发送完毕之后串口才会产生一次中断,此时可以利用DMA_GetCurrDataCounter();函数计算出本次的数据
[单片机]
基于STM32的智能电机保护器设计
0 引言 电机是工业生产领域中最主要的驱动源,如何有效地监控电机的运行状态,保护电机回路,提高电机的运行时间,减少电机故障,对工厂整体电网的运行十分关键。 电动机保护装置有很多种,目前使用得比较普遍的还是基于金属片机械式的热继电器,它结构简单,在保护电动机过载方面具有反时限特性。但它的保护功能少,无断相保护,对电机发生通风不畅、扫膛、堵转、长期过载、频繁启动等故障也不能起保护作用。此外,热继电器还存在重复性能差、大电流过载或短路故障后不能再次使用、调整误差大、易受环境温度影响而误动或拒动、功耗大、耗材多、性能指标落后等缺陷。 为响应国家节能减排的要求,采用基于微控制器的电子式电机保护器替代现有热继电器,具有广大的市场。
[单片机]
基于<font color='red'>STM32</font>的智能电机保护器设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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