OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4642|回复: 2

时钟都是打开了的,但是AD转换就是显示为0

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-4-26
在线时间
2 小时
发表于 2015-5-4 17:15:27 | 显示全部楼层 |阅读模式
5金钱
看了一下午没看出是哪里的问题,时钟什么的都打开了的
芯片是STM32F103RCT6
请大家帮忙看看
代码
main
[mw_shl_code=c,true]#include "delay.h" #include "sys.h" #include "usart.h" #include"ADC.h" float ADC_ConvertedValueLocal; int main(void) { u8 t; u8 len; // u16 times=0; delay_init(); //延时函数初始化 NVIC_Configuration_sys();// 设置中断优先级分组 uart_init(9600); //串口初始化为9600 ADC1_Init(); while(1) { ADC_ConvertedValueLocal=(float)ADC_ConvertedValue/4096*3.3; if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 printf("\r\nThe current AD value is:0x%04X\r\n\n" ,ADC_ConvertedValue); printf("\r\nThe voltage is :%f\r\n\n" ,ADC_ConvertedValueLocal); for(t=0;t<len;t++) { USART1->DR=USART_RX_BUF[t]; while((USART1->SR&0X40)==0);//等待发送结束 } printf("\r\n\r\n");//插入换行 USART_RX_STA=0; } } } [/mw_shl_code]
ADC.c
[mw_shl_code=c,true]#include"ADC.h" volatile u16 ADC_ConvertedValue; void ADC1_Init(void) { ADC1_GPIO_Config(); ADC1_Mode_Config(); } static void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_ADC1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOB, &GPIO_InitStructure); } static void ADC1_Mode_Config() { DMA_InitTypeDef DMA_InitStructure; ADC_InitTypeDef ADC_InitStructure; /*配置DMA*/ DMA_DeInit(DMA1_Channel1);//复位DMA通道1 DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //定义 DMA通道外设基地址=ADC1_DR_Address(这是一个自定义的宏) DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; //定义DMA通道存储器地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//指定外设为源地址 DMA_InitStructure.DMA_BufferSize = 1;//定义DMA缓冲区大小1 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//当前外设寄存器地址不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//当前存储器地址不变 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//定义外设数据宽度16位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //定义存储器数据宽度16位 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA通道操作模式位环形缓冲模式 DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA通道优先级高 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//禁止DMA通道存储器到存储器传输 DMA_Init(DMA1_Channel1, &DMA_InitStructure);//初始化DMA通道1 DMA_Cmd(DMA1_Channel1, ENABLE); //使能DMA通道1 /*配置ADC1*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作在独立模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //禁止扫描模式,扫描模式用于多通道采集 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//开启连续转换模式,即不停地进行ADC转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不使用外部触发转换 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//采集数据右对齐 ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道数目为1 ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC RCC_ADCCLKConfig(RCC_PCLK2_Div8);//配置ADC时钟,为PCLK2的8分频,即9Hz ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);//ADC1选择信道8,音序器等级1,采样时间55.5个周期 ADC_DMACmd(ADC1, ENABLE);//使能ADC的DMA接口 ADC_Cmd(ADC1, ENABLE);//使能ADC1 ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器 while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成 ADC_StartCalibration(ADC1);//开始ADC1校准 while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换 } [/mw_shl_code]
ADC.h
[mw_shl_code=c,true]#ifndef _ADC_H_ #define _ADC_H_ /********************************************************************************/ #include "stm32f10x.h" #define ADC1_DR_Address ((u32)0x40012400+0x4c) extern volatile u16 ADC_ConvertedValue; void ADC1_Init(void); static void ADC1_GPIO_Config(void); static void ADC1_Mode_Config(void); /********************************************************************************/ #endif[/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]结果是[/mw_shl_code] [mw_shl_code=c,true]

[/mw_shl_code] [mw_shl_code=c,true]可以看出 [mw_shl_code=c,true]ADC_ConvertedValue是为0的。 PB0所接的点用万用表测试为1.6V的 并不为0[/mw_shl_code] [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-5-4 23:45:08 | 显示全部楼层
不用DMA  转换正确么?
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-4-26
在线时间
2 小时
 楼主| 发表于 2015-5-5 10:23:27 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
后来尝试不用DMA转换时正确的。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 21:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表