完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include "STM32f10x.h"
#include "misc.h" #include "stm32f10x_usart.h" #include "stm32f10x_adc.h" #include "stm32f10x_dma.h" #include "stdio.h" #include "delay.h" u16 ADC_Data[50]; void RCC_Configuration(void); void GPIO_Configuration(void); void USART_Configuration(void); void NVIC_Configuration(void); void ADC_Configuration(void); void DMA_Configuration(void); int fputc(int ch,FILE *f); int main(void) { u32 data; u8 i; RCC_Configuration(); GPIO_Configuration(); USART_Configuration(); NVIC_Configuration(); ADC_Configuration(); DMA_Configuration(); while (1) { data=0; for(i=0;i<50;i++) { data=data+ADC_Data[i]; } data=data/50; printf("当前数值:%.3frn",(3.3/4095)*data); delay_ms(1000); delay_ms(1000); delay_ms(1000); delay_ms(1000); } } void RCC_Configuration(void) { SystemInit();//72MHz RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6);//6分频,12MHz RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //TX GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); //RX GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë GPIO_Init(GPIOA,&GPIO_InitStructure); //PC0;ADC1 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_Init(GPIOC,&GPIO_InitStructure); } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void USART_Configuration(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate=9600; USART_InitStructure.USART_WordLength=USART_WordLength_8b; USART_InitStructure.USART_StopBits=USART_StopBits_1; USART_InitStructure.USART_Parity=USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; USART_Init(USART2,&USART_InitStructure); USART_Cmd(USART2,ENABLE);//´ USART_ClearFlag(USART1,USART_FLAG_TC); } int fputc(int ch,FILE *f) { USART_SendData(USART2,(u8)ch); while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET); return ch; } void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5); ADC_DMACmd(ADC1,ENABLE); ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1);//¿ªÊ¼Ð£×¼ while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1,ENABLE);//Æô¶¯ } void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&ADC1->DR; DMA_InitStructure.DMA_MemoryBaseAddr=(u32)ADC_Data; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=50; DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc=DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; DMA_InitStructure.DMA_Priority=DMA_Priority_High; DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA1_Channel1,&DMA_InitStructure); DMA_Cmd(DMA1_Channel1,ENABLE); }
|
|
相关推荐
13个回答
|
|
这个程序是在之前ADC的程序基础上修改的,添加了DMA功能,就始终数据为0;菜鸟求解
|
|
|
|
大神快来看看啊。不胜感激
|
|
|
|
为啥没人啊
|
|
|
|
已搞定,原来是STM32库函数手册有误,看来使用中文版的还是不靠谱啊
|
|
|
|
看到重点了吗
|
|
|
|
。。。。全写成外设地址的了
|
|
|
|
中文的文件很多谢细节做得不好,英文不是很牛的可以中英文一起看,like me
|
|
|
|
对啊,关键是库函数手册的问题,我当时写的时候还感觉不对,后来一想,这个应该不会错吧,结果就呵呵了,大家以后就要留心了 |
|
|
|
恩恩,我也正有此打算,你那里有没有英文版的,发给我一份可以吗 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32串口接受中断使用C++STL中的queue导致所有中断失效
75 浏览 0 评论
2436 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1260 浏览 0 评论
3306 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
3078 浏览 4 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 13:26 , Processed in 0.801441 second(s), Total 97, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号