找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2206|回复: 1
打印 上一主题 下一主题
收起左侧

基于STM32的多通道采集例程

[复制链接]
跳转到指定楼层
楼主
ID:338959 发表于 2019-5-14 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "adc.h"
#include "DMA.h"



void Display_Adc_Val(u16 Adc_Val)       //显示12位ADC值
{
        u8 qian,bai,shi,ge;
        qian=Adc_Val/1000;
        bai =Adc_Val/100%10;
        shi =Adc_Val/10%10;
        ge = Adc_Val%10;
        UART1_SendByte(qian+'0');
        UART1_SendByte(bai +'0');
        UART1_SendByte(shi +'0');
        UART1_SendByte(ge +'0');
}




void Display_Adc_Vol(u16 Adc_Vol)       //显示AD采样电压值
{
        u16 decimal1,decimal2,decimal3;       //定义三位小数
        float temp;
        u16 temp1;
        
        temp=(float)Adc_Vol*(3.3/4096);    //AD采样电压值
        temp1=temp;                       //取得电压值整数部分
        
        UART1_SendByte(temp1+'0');        //串口显示整数部分
        
        temp-=temp1;                   //取得电压值小数部分
        temp*=1000;                   //将电压值放大1000倍,方便求小数
        
        decimal1=(u16)temp/100;       //小数点后第一位
        decimal2=(u16)temp%100/10;    //小数点后第二位
        decimal3=(u16)temp%10;        //小数点后第三位

        UART1_SendByte('.');           //串口显示小数点
        UART1_SendByte(decimal1+'0');  //串口显示小数点后第一位
        UART1_SendByte(decimal2+'0');  //串口显示小数点后第二位
        UART1_SendByte(decimal3+'0');  //串口显示小数点后第三位
        
}



void Display_ADC(void)           //显示12位ADC值和电压值
{
        
        
        UART1_SendString("CH0:");                    //通道0,显示"CH0:"
        Display_Adc_Val(ReadADCAverageValue(0));    //显示通道ADC1通道0的12位ADC值
        UART1_SendByte('\t');                       //制表字符,ADC值和电压值显示分开
        Display_Adc_Vol(ReadADCAverageValue(0));    //显示通道ADC1通道0的电压值,保留三位小数
        UART1_SendByte('V');                        //显示"V"
        UART1_SendString("\r\n");                  //回车换行      以下依次类推
        
  UART1_SendString("CH1:");                  //通道1
        Display_Adc_Val(ReadADCAverageValue(1));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(1));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH2:");                   //通道2
        Display_Adc_Val(ReadADCAverageValue(2));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(2));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH3:");                   //通道3
        Display_Adc_Val(ReadADCAverageValue(3));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(3));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH4:");                   //通道4
        Display_Adc_Val(ReadADCAverageValue(4));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(4));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH5:");                   //通道5
        Display_Adc_Val(ReadADCAverageValue(5));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(5));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH6:");                  //通道6
        Display_Adc_Val(ReadADCAverageValue(6));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(6));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH7:");                  //通道7
        Display_Adc_Val(ReadADCAverageValue(7));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(7));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH8:");                  //通道8
        Display_Adc_Val(ReadADCAverageValue(8));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(8));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
        
  UART1_SendString("CH9:");                  //通道9
        Display_Adc_Val(ReadADCAverageValue(9));
        UART1_SendByte('\t');
        Display_Adc_Vol(ReadADCAverageValue(9));
        UART1_SendByte('V');
        UART1_SendString("\r\n");
                        
        
}




int main(void)
{        


        SystemInit();              //系统初始化
        delay_init();                    //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);    //串口初始化,波特率115200
        Adc_Init();           //ADC和DMA初始化
         

  while(1)
        {
               
                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待传输完成否则第一位数据容易丢
                 Display_ADC();                                           //显示12位ADC值和电压值                                    
                 UART1_SendString("\r\n");                                //回车换行
                 delay_ms(500);                                           //延时500ms
               
        }
        
}



ADC_10_F103C(10channel_ADC).7z

193.04 KB, 下载次数: 30, 下载积分: 黑币 -5

源代码工程

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:536632 发表于 2019-7-31 11:51 | 只看该作者
没有直接的工程
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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