STM32的ADC(DMA)在数码管上无法显示值 2C

数码管的程序是正确的,配置程序也是仿照例程写的,有哪位前辈遇到过类似的问题呢
DMA循环读数,ADC循环采样

int main(void)
{

    extern __IO uint32_t ADC_ConvertedValue;
    __IO uint16_t ADC_ConvertedValue2;
    __IO uint16_t ADC_ConvertedValueLocal=15;


    NumInit();          
    SysTickInit();  
    ADC1_Init();        
    Timer3Init();
    Timer3Delay_ms(100);



while(1)
    {
            ADC_ConvertedValue2=ADC_ConvertedValue&0x0000FFFF;
            ADC_ConvertedValueLocal=(int)ADC_ConvertedValue2/4096*3300;
            SetNumDisplayDecimal(ADC_ConvertedValueLocal);  //值显示在数码管上
    }//End of While(1)
} 

#include "adc.h"

#define ADC1_DR_Address    ((u32)0x40012400+0x4c)

__IO uint32_t ADC_ConvertedValue;
//__IO u16 ADC_ConvertedValueLocal;



 void ADC1_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* Enable DMA clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

    /* Enable ADC1 and GPIOC clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);

    /* Configure PA6  as analog input */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 
    GPIO_Init(GPIOA, &GPIO_InitStructure);          
}


 void ADC1_Mode_Config(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;

    /* DMA channel1 configuration */
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;  
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    DMA_InitStructure.DMA_BufferSize = 1;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;  
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
    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);

    /* Enable DMA channel1 */
    DMA_Cmd(DMA1_Channel1, ENABLE);

    /* ADC1 configuration */

    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_TempSensorVrefintCmd(ENABLE);

    /*ÅäÖÃADCʱÖÓ£¬ÎªPCLK2µÄ8·ÖƵ£¬¼´9Hz*/
    RCC_ADCCLKConfig(RCC_PCLK2_Div8); 
    /*ÅäÖÃADC1µÄͨµÀ6Ϊ55.  5¸ö²ÉÑùÖÜÆÚ£¬ÐòÁÐΪ1 */ 
    ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_55Cycles5);

    /* Enable ADC1 DMA */
    ADC_DMACmd(ADC1, ENABLE);

    /* Enable ADC1 */
    ADC_Cmd(ADC1, ENABLE);


    ADC_ResetCalibration(ADC1);

    while(ADC_GetResetCalibrationStatus(ADC1));

    ADC_StartCalibration(ADC1);

    while(ADC_GetCalibrationStatus(ADC1));


    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}


void ADC1_Init(void)
{
    ADC1_GPIO_Config();
    ADC1_Mode_Config();
}

0

1个回答

你先把采集到的ADC通过串口打印出来看数据是否正确 然后再调试SEG显示代码 找出错误原因 希望对你有帮助!!

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
stm32 ADC,DMA
stm32 ADC,DMA使用,献给初学者
STM32的ADC的DMA方式
之前了解了ADC的单独使用,由于AD的采样和处理对CPU的消耗较大,单独使用AD会对CPU 的很有要求 void Adc_Init(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
STM32 ADC(DMA实现)
STM32 ADC(DMA实现)
趣谈STM32的ADC与DMA
最近在做ADC采样电池电压,有时候有点纠结,不用DMA我能很好的把电压给采集出来,那么我为什么要费那些精力去使用DMA呢?用了DMA万一搞错了呢,不用DMA的效果还没有影响到让我非用不可的地步。我有时候确实会有这些小纠结,不想太麻烦,一分钟能做出来的事情,不想用两分钟做出来。但是看到网上很多人一谈到ADC立马就开始说各种DMA,仿佛这种类似的数据外设到内存的传输非DMA不可。 网上的一篇文章详细
stm32 ADC DMA传送
基于stm32的ADC采样,使用DMA传输,减轻MCU负担,速度极快
51单片机——在数码管上显示红外遥控器按钮的码值
/*在数码管上显示红外遥控器按钮的码值*/ #include <reg52.h> #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0...
STM32 使用DMA处理ADC
ADC: 1.STM32内部的ADC模块有三个ADC1,ADC2,ADC3,他们彼此独立,所以可以进行同步采样。 2ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生,要在RCC_CFGR配置,再ADC自己的寄存器中在没有时钟分频的配置位。 3.ADC转换时间:  STM32F103xx增强型产,时钟为56MHz时为1μ s( 时钟为72MHz为1.17 μ s)
STM32 DMA 多通道 ADC 采集
1. 本次实践目标     a. 完成外部 ADC 的采集, 连接引脚为 PC2      b. 完成 STM32 内置温度传感器 ADC 的采集     c. ADC 的采集必须以 DMA 的方式工作,通过 FreeRTOS 系统中创建的一个进程读取采集结果,并打包通过网络发送至上位机 2. 查看 datasheet      2.1 确认 STM32 内部温度传感器
STM32定时器触发ADC +DMA
Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1、使用定时器中断每隔一定时间进行ADC转换,这样每次都必须读ADC的数据寄存器,非常浪费时间! 2、把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采集然后通过DMA把数据搬运至内存。但是这样做的话还得加一个定时中断,用来定时读取内存中的数据! 3、使用ADC的定时器触发ADC转换的功能,然后使用DMA进行数据的搬运!这样只要设置好定时器的触发间隔,就能实现ADC定时采样转换的功能,然后可以在程序的死循环中一直检测DMA转换完成标志,然后进行数据的读取,或者使能DMA转换完成中断,这样每次转换完成就会产生中断,我是采用第二种方法。
STM32 ADC + DMA 使用学习笔记
ADC1使用DMA2,数据流0,通道0,这个是手册固定死的;ADC3使用DMA2,数据流0,通道2;只有ADC1和ADC3拥有DMA功能,ADC2要想使用DMA必须在双ADC模式下,不能单独使用DMA。ADC2的DMA是需要通过双模式工作,然后在ADC1的DR中读出32位的ADC结果,高16位就是ADC2的转换结果;还有ADC1和ADC2的双模式是可以实现同步采样的。 ...
STM32中的ADC用DMA
M3核的stm32F10x系列在ADC的DMA方式上,这篇说的比较形象,还有带中文注释的代码段。
STM32多通道DMA—ADC采样
title: STM32多通道DMA—ADC采样 tags: STM32 date: 2019-02-26 22:30:00 阿正的个人站学习笔记–STM32多通道DMA—ADC采样 资料来源于杜洋工作室,视频:https://www.bilibili.com/video/av18222153/?p=9 普通的ADC采样,一般直接采用通道即可,但是利用DMA可以实现快速的数据读取,...
在数码管上静态显示键值
#include #define uchar unsigned char #define uint unsigned int #define LL P0 #define temp P1 uchar code tab[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uc
关于蓝桥杯ds18b20在数码管上显示
最近这两天一直在研究一个问题,就是将ds18b20这个温度芯片实时的传送到数码管上,这个与我之前写的有点差别。以前的方法笨是笨了一点,但好在可以直接显示,没有一点毛病让你挑剔,但这次的就有点不一样。废了好大的劲与同学才搞出来。不多说,先上源码。#include #include #include //#include"onewire.c" //#include"onewire.h" #define
温度传感器数据在数码管上显示
温度传感器数据在数码管上显示
温度采集DS18B20在数码管上显示
在51单片机上,C语言编程采集温度传感器DS18B20的温度值,并显示在数码管上,很管用哦
按键的程序在数码管上显示
用按键调节数字,数字可以自己调,可以移位
矩阵键盘在数码管上显示1-16
#include #include "./delay/delay.h" #define PORTLEN P0 #define KEYPORT P1 sbit bit_select = P2^0; sbit seg_select = P2^1; unsigned char duanma[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
矩阵键盘键值在数码管上显示
可以实现矩阵键盘键值的显示,试验过了可以用。
温控 显示在数码管上的C程序
可以测出精确的温度,并且在数码管上显示。并且可以随温度的变化而发生变化。
AD采集数据在数码管上显示
AD采集到的数据在数码管上显示,方便,程序用C编的,有仿真图
实现学号在数码管上的滚动 硬件描述语言
利用VHDL语言,实现了学生本人的学号在六位数码管上的滚动,
STM32的DMA模式ADC采集全部开启
STM32F103的ADC采集,DMA模式,默认全部开启
stm32之ADC应用实例(单通道、多通道、基于DMA)
https://blog.csdn.net/weixin_42653531/article/details/81123770
STM32 ADC DMA 使用心得 2
(二)ADC循环采集六路电压,使用DMA. 这次实验真的很郁闷,对DMA的不了解让我深陷误区,明白之后,让我更加佩服DMA的强大。 误区就是:从实验的目标我们知道这次是用DMA把ADC转换的数据传送到内存中的一个数组里存起来,因为是采集6个通道,这里使能了ADC的扫描模式。一旦启动ADC,就会按顺序转换SQRX里选中的通道,问题就是我一开始以为ADC与DMA并不会协调工做,也就是ADC自己转自己的,DMA自己传自己的,这样的话内存里的数组就不是我想要的了,后来着实的研究了很长时间,在群里的一位兄弟的提醒下,我才知道,可能我想的复杂了,也许就可以在ADC转一次,然后DMA把数据传一次,Ok,经过实验得知,这个想法是正确的。
STM32 ADC 多通道采集非DMA模式
网上的列子大多数为DMA,所以写个帖子说一下非DMA怎么操作。由于多通道的时候采集的时候,AD是连续的按照设定好的铜带顺序进行采集的,所以一般会发生这个通道的数据把另一个通道的数据覆盖的问题,让人感觉每个通道好像错乱一样。比如我明明读的通道5缺显示的通道7的数据。我开始困扰了许久,以为是板子丝印错误了。下面说一下怎么配置的,简单的讲就是把所有通道的GPIO口都设置好,也就是模拟输入但是!!!要设置...
STM32实现ADC的DMA配置,已测试通过
#define ADC1_DR_Address ((u32)0x40012400+0x4c) /*************************************************** 函数名:ADC1_Init 描述 :无 输入 :无 输出 :无 *************************************************/ void ADC1_...
STM32 ADC 采用DMA 工程源码
基于STM32的ADC转换,采用DMA读取数据,并显示在屏幕上。引脚请看代码。
STM32 ADC DMA多通道采样例程
STM32 ADC DMA多通道采样例程 STM32F103单片机 Keil工程
STM32 ADC DMA 使用心得 1
这次的主要目标 (一)ADC以中断方式单次采集一路电压。 (二)ADC以中断方式单次采集六路电压,使用DMA.
stm32多路ADC采集程序采用DMA
stm32多路ADC采集程序采用DMA,本测试程序使用了3路ADC
STM32——多通道ADC的DMA方式采集方法
前言: 最近在调试STM32F205芯片ADC多通道DMA方式采集数据,总结下STM32多通道ADC的DMA方式采集的使用方法。 硬件平台:STM32F205 软件平台:keil v5 函数库:标准库 多通道ADC的配置 #define Channel_Num 9 //9 ¸adc的通道数,本例使用9个通道 #define Sample_Num 10 //采样次数,本例使用平均滤波...
零死角玩转stm32 ADC(DMA模式)
stm32 ADC 例程 零死角玩转stm32 零死角玩转stm32 ADC(DMA模式)
STM32采集多路ADC到DMA的方法
最近在做一个手柄,用到了一个游戏摇杆,游戏摇杆的原理就是两个电位器,通过读取ADC的值计算位置,原理和触摸屏类似,那么就需要用到两路ADC了,但是我用的开发板是野火的,火哥给的例程只有单路ADC采集,查阅了相关资料解决了多路的问题,现在我把主要的代码贴在下面,以及一些注意的地方。 #define ADC1_DR_Address ((u32)0x40012400+0x4c) __IO
STM32的ADC、DMA、USART的综合练习
语言: STM32笔记(三)ADC、DMA、USART的综合练习 /****************************************************************************** * 本文件实现ADC模块的基本功能 * 设置ADC1的常规转换序列包含CH10和CH16(片内温度传感器) * 设置了连续转换模式,并使用DMA传输 * AD转换值被放在了AD_Value[2]数组内,[0]保存CH0结果,[1]保存CH16结果 * GetVolt函数计算[0]的值对应的电压值(放大100倍,保留2位小数) * GetTemp函数计算[1]的值对应的温度值,计算公式在相应函数内有说明 *******************************************************************************/
STM32实现DMA读取ADC数据
昨天学习了DMA写了一个用DMA读取ADC数据的程序,记录下整个过程和一点心得   DMA配置详细说明 (MDK的汉字2复制过来就是乱码,我重新打了一遍注释,晕~) //DMA1各通道配置 //外设->存储器/16位数据宽度 //DMA_CHx:DMA通道CHx //cpar:外设地址 //cmar:存储器地址 //cndtr:数据传输量(因为我是一个16位的数据,所以是一) vo...
基于 STM32 的 DMA 方式 ADC 转换
基于 STM32 的 DMA 模式下的 ADC 转换,keil 编译
stm32通过DMA方式采集ADC数据
程序功能是把ADC1模块里通道14的输入电压转换后通过USART2发送到PC,在PC机上用串口调试助手观察接收数,极大的节省了cpu的时间,释放了cpu,提高效率!
stm32多通道ADC非DMA程序
stm32多通道ADC非DMA程序
STM32之ADC实例(基于DMA方式)
ADC简介:     ADC(Analog-to-Digital Converter,模/ 数转换器)。也就是将模拟信号转换为数字信号进行处理,在存储或传输时,模数转换器几乎必不可少。    STM32在片上集成的ADC外设非常强大,我使用的奋斗开发板是STM32F103VET6,属于增强型的CPU,它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次,连续,扫描或间断
相关热词 c#串口测试应用程序 c# 匹配 正则表达式 c#防止窗体重绘 c#读写txt文件 c#挖地雷源代码 c#弹框选项 c# 移除 队列 c# 密码写入配置文件 c# 获取可用内存大小 c# 嵌入excel编辑