模数转换器ADS1118 四通道采集电压 stm32f103

寄存器配置

uint16_t cha0_count=0xD08B;//0xC08B 0xD08B 0xE08B 0xF08B
uint16_t cha1_count=0xE08B;
uint16_t cha2_count=0xF08B;
uint16_t cha3_count=0xC08B;

引脚配置

配置 SCK引脚, GPIOA^5
配置 DOUT引脚,GPIOA^6
配置 DIN引脚,GPIOA^7
配置CE引脚,GPIOA^4

代码ADS1118.C

#include "ADS1118.h"volatile uint8_t readata1;
volatile uint8_t readata2;
volatile uint8_t readata3;
volatile uint8_t readata4;
volatile uint32_t readata;void GPIO_ADS_Init(void)
{SPI_InitTypeDef  SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/*SCK,MISO,MOSI,GPIOA^5,GPIOA^6,GPIOA^7 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);CS_SET; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                     SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                       SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                          SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI1, &SPI_InitStructure);SPI_Cmd(SPI1, ENABLE);
}int8_t SPI_ADS_Send(uint8_t dat)    //发送数据
{/* 当 SPI发送缓冲器非空时等待 */while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);/* 通过 SPI2发送一字节数据 */SPI_I2S_SendData(SPI1, dat);     /* 当SPI接收缓冲器为空时等待 */while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);/* Return the byte read from the SPI bus */return SPI_I2S_ReceiveData(SPI1);
}void delay( uint32_t nCount )
{for(; nCount != 0; nCount--){;}
}uint32_t SPI_RW_Reg(uint16_t CofigReg)
{delay(10);readata1=SPI_ADS_Send((uint8_t)(CofigReg>>8));readata2=SPI_ADS_Send((uint8_t)CofigReg);readata=( ((uint32_t)readata1<<8) | (uint32_t)readata2 );delay(1000);if(readata>65499)readata=0;return readata;
}

代码ADS1118.H

#ifndef __ADS1118_H
#define __ADS1118_H
#include "stm32f10x.h"#define CS_RESET GPIO_ResetBits(GPIOA,GPIO_Pin_4)
#define CS_SET GPIO_SetBits(GPIOA,GPIO_Pin_4)void GPIO_ADS_Init(void);
int8_t SPI_ADS_Send(uint8_t dat);
void delay( uint32_t nCount );uint32_t SPI_RW_Reg(uint16_t CofigReg);#endif

代码

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "exti.h"
#include "ADS1118.h"
#include "deal.h"
#include "timebreak.h"
#include "soundout.h"/*配置寄存器的值:0x8283  ( 1000 0010 1000 0011 )bit15:1bit14-12: 100 AIN0模拟输入 bit11-9:  001 参考电压4.096V000 参考电压6.144Vbit8:     0   连续转换模式bit4      0   ADC模式配置 SCK引脚, GPIOA^5 配置 DOUT引脚,GPIOA^6 配置 DIN引脚,GPIOA^7 配置CE引脚,GPIOA^4LCD_DrawLine(500,360,800, 360);LCD_Fill(200,0,210,210,0x0000);ch0_offset=get_offset(cha0_count);ch1_offset=get_offset(cha1_count);ch2_offset=get_offset(cha2_count);ch3_offset=get_offset(cha3_count);printf("%fV ",ch1_volte);
*/int main(void)
{SystemInit();   GPIO_ADS_Init();      //ADS1118 引脚配置delay_init();            //延时函数 初始化 delay_ms(10);uart_init(115200);        //串口初始化115200   LCD_Init();             //LCD初始化                                    delay_ms(10);   LED_Init();delay_ms(10);tim2_config();  LCD_interface();POINT_COLOR=BLACK; TIM4_PWM_Init(99,0); showhz24str(20,50,BLACK,WHITE,"电压"); showhz24str(20,100,BLACK,WHITE,"电压"); showhz24str(20,150,BLACK,WHITE,"电压"); showhz24str(20,200,BLACK,WHITE,"电压"); LCD_ShowString(20+24*2,50,200,24,24,"L-X: .");   LCD_ShowString(20+24*2,100,200,24,24,"L-Y: .");  LCD_ShowString(20+24*2,150,200,24,24,"R-X: .");  LCD_ShowString(20+24*2,200,200,24,24,"R-Y: .");  LCD_ShowString(245,5,200,24,24,"POSE");   while(1){LCD_interface() ;ch0_volte=ch0_AD*0.1875/1000;ch1_volte=ch1_AD*0.1875/1000;ch2_volte=ch2_AD*0.1875/1000;ch3_volte=ch3_AD*0.1875/1000-1.04;//buchang ch0_AD_int=ch0_volte;ch1_AD_int=ch1_volte;ch2_AD_int=ch2_volte;ch3_AD_int=ch3_volte;LCD_ShowxNum(20+24*4,50,ch0_volte,1,24,0);LCD_ShowxNum(20+24*4,100,ch1_volte,1,24,0);LCD_ShowxNum(20+24*4,150,ch2_volte,1,24,0);LCD_ShowxNum(20+24*4,200,ch3_volte,1,24,0);LCD_ShowNum(20+24*5,50,(ch0_volte-ch0_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,100,(ch1_volte-ch1_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,150,(ch2_volte-ch2_AD_int)*1000,3,24);LCD_ShowNum(20+24*5,200,(ch3_volte-ch3_AD_int)*1000,3,24);  pose_deal();}
}void TIM2_IRQHandler(void)
{static u8 k=0;if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){switch (k){case 1:{ch0_AD=get_AD(cha0_count);LCD_Fill(0,250, 320, 450,0xffff);break;   }case 2:{ch1_AD=get_AD(cha1_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 3:{ch2_AD=get_AD(cha2_count);LCD_Fill(0,250, 320, 450,0xffff);break;}                 case 4:{ch3_AD=get_AD(cha3_count);LCD_Fill(0,250, 320, 450,0xffff);break; }case 5:{                    pose_judge();break; }default: break;}k++;if(k>5) k=1;}TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);//清除标志位
}

模数转换器ADS1118 四通道采集电压 stm32f103相关推荐

  1. 基于STM32F407使用ADC采集电压实验

    核心板:STM32F407 实验目的:使用ADC采集电压值将其打印在串口助手上 目录 ADC简介 STM32F407 ADC通道对应的引脚 STM32F407中的数据寄存器 ADC 规则数据寄存器 ( ...

  2. 长程蓝牙温湿度及光照度传感器 , 带四通道开关及指示灯(集成太阳能微能量采集功能)

    主要硬件: Nordic nRF52840 长程蓝牙 SoC , 外置棒式天线 TE HTU21DF 数字温湿度传感器 ROHM BH1750FVI 光照度传感器 ANALOG ADP5092 集成M ...

  3. 用ADC0809实现八通道采集

    ADC0809完成八通道采集 1.ADC0809的概述 1.1芯片特点 1.2引脚介绍 1.3工作过程 2.使用原理图仿真 2.1实验仿真概述 2.2原理图 3.解析原理图 3.1晶振和复位模块 3. ...

  4. 14位125MSPS四通道ADC电路图讲解(通过后端数字求和增强SNR性能)_电工基础电路图讲解

    电路图简介: 所示电路是14位.125 MSPS四通道ADC系统的简化图,该电路使用后端数字求和将信噪比(SNR)从单通道ADC的 74 dBFS提升到四通道ADC的78.5 dBFS.这项技术特别适 ...

  5. STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换

    目录 一.ADC 模数转换器 1.1ADC简介 1.2 逐次逼近型ADC工作原理 1.3STM32中的ADC基本结构 1.4STM32中ADC的输入通道 1.5STM32中的ADC的四种转换模式 1. ...

  6. Pico四通道汽车诊断示波器柴油车套装(型号:PQ179)

    Pico汽车诊断示波器把你的PC电脑变成一台功能强大的汽车诊断工具,快速查找现代车辆上日益增加的传感器,执行器和电路的故障. 12位高分辨率的PC示波器模块连接到你的电脑的USB接口上,并且能够采集达 ...

  7. Pico四通道汽车诊断示波器高级套装(型号:PQ180)

    Pico汽车诊断示波器把你的PC电脑变成一台功能强大的汽车诊断工具,快速查找现代车辆上日益增加的传感器,执行器和电路的故障. 12位高分辨率的PC示波器模块连接到你的电脑的USB接口上,并且能够采集达 ...

  8. STM32F0xx_ADC采集电压配置详细过程

    前言 关于ADC这一块的功能基本上也算是CortexM芯片的标配了.ST的每一块芯片都有这个功能,只是说因型号不同,通道数.位数等有所不同.STM8的芯片大多数都是10的,也就是说分辨率可达到:参考电 ...

  9. STM32F4 ADC+DMA单通道采集

    背景:对锂电池电压进行采集,由于电池电压为12V,已经提前对12V进行分压,保证ADC采集电压的范围为0~3.3V.对电池电压的采集不用太过频繁,循环模式下的ADC+DMA对一直采集电压浪费资源.于是 ...

最新文章

  1. php stortime,文件存储 - Laravel 5.8 中文文档手册 - php中文网手册
  2. 【数字信号处理】线性常系数差分方程 ( “ 线性常系数差分方程 “ 与 “ 线性时不变系统 “ 关联 | 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 线性时不变系统方法 )
  3. 计算机组装大赛队名,比赛项目设计及评分标准-中国海员技能大比武.DOC
  4. PHP通过GET方法参数为数组请求
  5. java激光推送ios_关于ios极光推送server端注意的地方
  6. RandomizedLogisticRegression ImportError解决思路参考
  7. A - 顺序表应用1:多余元素删除之移位算法
  8. C++ String封装
  9. 有趣的算法:1元=1分
  10. android 上传图片给js,安卓中HTML5图片上传实例详解
  11. 手把手教你逆向分析 Android 程序
  12. siamfc代码解读_SiamFC算法改进思路
  13. 球体积公式推导(积分)
  14. gromacs 安装_安装gromacs的一些心得
  15. linux多线程_免费Linux下载工具,你还不知道?
  16. 中国进入被觉醒时代 - 长平
  17. 《C++大学教程》学习笔记(九)
  18. 用户行为分析的基本概览和常用名词解释
  19. ubuntu 修改默认用户名_Ubuntu更改用户名的方法
  20. 关于builder模式的使用

热门文章

  1. 情迁QQ机器人已具备图片发送能力
  2. 改进后的第二版Retropie树莓派掌机(三)
  3. (AI)旋转波点练习
  4. 性能优化之电量优化2-使用Battery Historian生成电量消耗报告
  5. C语言static变量详解
  6. hping3网络延迟检测工具——筑梦之路
  7. 素数定理nefu117
  8. DOTA数据集应用于Yolo-v4(-Tiny)系列1——切割图片与转换Annotation格式
  9. 【COMP207 LEC10-12】
  10. lc0422lc0423