您的位置 首页 芯闻

STM32学习笔记之ADC–DMA方法

程序功能是把ADC1模块里通道14的输入电压转换后通过USART2发送到PC,在PC机上用串口调试助手观察接收数据:STM32是12位ADC,测量结果基本还

程序功用是把ADC1模块里通道14的输入电压转化后经过USART2发送到PC,在PC机上用串口调试帮手调查接纳数据:

STM32是12位ADC,丈量成果根本还能够!程序用了DMA来传输ADC转化值,调高了读取速度。串口部分用是上一篇串口调试笔记里的代码。


#include
#include

#define ADC1_DR_Address((u32)0x4001244C)

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

vu16 ADC_ConvertedValue;

void RCC_Config(void);
void GPIO_Config(void);
void USART_Config(void);
void DMA_Config(void);
void ADC_Config(void);
void Put_String(u8 *p);
void Delay(vu32 nCount);
int main(void)
{
RCC_Config();
GPIO_Config();
USART_Config();
DMA_Config();
ADC_Config();


while(1)
{

Delay(0x8FFFF);
printf(“ADC = %X Volt = %d mvrn”, ADC_ConvertedValue, ADC_ConvertedValue*3300/4096);

}
}

void RCC_Config(void)
{
ErrorStatus HSEStartUpStatus;//界说外部高速晶体发动状况枚举变量
RCC_DeInit();//复位RCC外部设备寄存器到默认值
RCC_HSEConfig(RCC_HSE_ON); //翻开外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp();//等候外部高速时钟准备好
if(HSEStartUpStatus == SUCCESS)//外部高速时钟现已准别好
{

RCC_HCLKConfig(RCC_SYSCLK_Div1);//装备AHB(HCLK)时钟=SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //装备APB2(PCLK2)钟=AHB时钟
RCC_PCLK1Config(RCC_HCLK_Div2);//装备APB1(PCLK1)钟=AHB 1/2时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div4);//装备ADC时钟=PCLK2 1/4

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//装备PLL时钟 == 外部高速晶体时钟*9
RCC_ADCCLKConfig(RCC_PCLK2_Div4);//装备ADC时钟= PCLK2/4

RCC_PLLCmd(ENABLE);//使能PLL时钟
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等候PLL时钟安排妥当
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//装备体系时钟 = PLL时钟

while(RCC_GetSYSCLKSource() != 0x08) //查看PLL时钟是否作为体系时钟
{
}
}
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA, ENABLE);//使能DMA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
//使能ADC1,GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
//翻开GPIOD和AFIO时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能串口2时钟
}

void GPIO_Config(void)
{
//设置RTS(PD.04),Tx(PD.05)为推拉输出形式
GPIO_InitTypeDef GPIO_InitStructure; //界说GPIO初始化结构体
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//使能GPIO端口映射USART2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;//挑选PIN4 PIN5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //引脚频率50M
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//引脚设置推拉输出
GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化GPIOD
//装备CTS (PD.03),USART2 Rx (PD.06)为浮点输入形式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//装备PC4为模仿输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/256543.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部