糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > ADS1118 STM32模拟spi驱动(HAL)

ADS1118 STM32模拟spi驱动(HAL)

时间:2022-11-02 19:29:44

相关推荐

ADS1118 STM32模拟spi驱动(HAL)

#ifndef _ADS1118_SPI_H#define _ADS1118_SPI_H#define ADS1118CS_AIN00xC38B//量程0-4.096v#define ADS1118CS_AIN10xD38B//量程0-4.096v#define ADS1118CS_AIN20xE38B//量程0-4.096v#define ADS1118CS_AIN30xF38B//量程0-4.096v/** CS配置为推挽输出模式* CLK配置推挽输出模式* MOSI配置为推挽输出* DOUT配置为输入模式*//** ADS1118对应的引脚高低配置宏定义*/#define ADS1118_CS1_SET()HAL_GPIO_WritePin(ADS1118_CS1_GPIO_Port, ADS1118_CS1_Pin, GPIO_PIN_SET)#define ADS1118_CS1_RESET()HAL_GPIO_WritePin(ADS1118_CS1_GPIO_Port, ADS1118_CS1_Pin, GPIO_PIN_RESET)#define ADS1118_CS2_SET()HAL_GPIO_WritePin(ADS1118_CS2_GPIO_Port, ADS1118_CS2_Pin, GPIO_PIN_SET)#define ADS1118_CS2_RESET()HAL_GPIO_WritePin(ADS1118_CS2_GPIO_Port, ADS1118_CS2_Pin, GPIO_PIN_RESET)#define ADS1118_CS3_SET()HAL_GPIO_WritePin(ADS1118_CS3_GPIO_Port, ADS1118_CS3_Pin, GPIO_PIN_SET)#define ADS1118_CS3_RESET()HAL_GPIO_WritePin(ADS1118_CS3_GPIO_Port, ADS1118_CS3_Pin, GPIO_PIN_RESET)#define ADS1118_CLK_SET()HAL_GPIO_WritePin(ADS1118_SCLK_GPIO_Port, ADS1118_SCLK_Pin, GPIO_PIN_SET)#define ADS1118_CLK_RESET()HAL_GPIO_WritePin(ADS1118_SCLK_GPIO_Port, ADS1118_SCLK_Pin, GPIO_PIN_RESET)#define ADS1118_MOSI_SET()HAL_GPIO_WritePin(ADS1118_DIN_GPIO_Port, ADS1118_DIN_Pin, GPIO_PIN_SET)#define ADS1118_MOSI_RESET()HAL_GPIO_WritePin(ADS1118_DIN_GPIO_Port, ADS1118_DIN_Pin, GPIO_PIN_RESET)#define ADS1118_DOUT_SET()HAL_GPIO_WritePin(ADS1118_DOUT_GPIO_Port, ADS1118_DOUT_Pin, GPIO_PIN_SET)#define ADS1118_DOUT_Pin_READ() HAL_GPIO_ReadPin(ADS1118_DOUT_GPIO_Port, ADS1118_DOUT_Pin)void ADS1118_Init(void); /**< ADS1118初始化 */void ADS1118_Main(void); /**< ADS1118读取函数 */float ResToTemp_NTC(float res,uint8_t ResType); /**< 电压值转换为温度值 */float GetADS1118Voltage(const uint16_t config,const uint16_t config1); /**< 获取ADS1118对应通道电压值 */ #endif

#include "main.h"#include <math.h>#include "delay.h"#include "ADS1118.h"float read_vol_buf[8];//读取两块芯片八个通道的电压值存放数组unsigned int ADS1118_ReadWrite16Bit(unsigned int cmd){unsigned char i;unsigned int read_data = 0;for(i = 0; i < 16; i++){delay_us(1);ADS1118_CLK_SET();delay_us(1);read_data <<= 1;if(ADS1118_DOUT_Pin_READ() == SET){read_data |= 1;}if(cmd & 0x8000){ADS1118_MOSI_SET();}else{ADS1118_MOSI_RESET();}cmd <<= 1;ADS1118_CLK_RESET();}return read_data;}float GetADS1118Voltage(const unsigned int config_now, const unsigned int config_next){float voltage_val = 0.0f;//采集到的电压值float VoltageK = 4.096f;//采集到的电压值,会根据你配置的config_now变量值自行转换量程unsigned int DataRx = 0;//读取转换后的值unsigned int count = 0;count = 10000;while(ADS1118_DOUT_Pin_READ() == SET && --count > 0)//等待转换完毕{delay_us(1);}DataRx = ADS1118_ReadWrite16Bit(config_next);//转换寄存器数据ADS1118_ReadWrite16Bit(config_next); //配置寄存器数据switch((config_now>>9)&0x07){case 0:VoltageK = 6.144f;break;case 1:VoltageK = 4.096f;break;case 2:VoltageK = 2.048f;break;case 3:VoltageK = 1.024f;break;case 4:VoltageK = 0.512f;break;default:VoltageK = 0.128f;break;}if( DataRx&0x8000 ) DataRx=0;//负电压置0voltage_val = DataRx * VoltageK / 65536; //获得实际电压voltage_val *= 2;return voltage_val;}void ADS1118_Init(void){//设置ADS1118_CS1初始化ADS1118_CS2_SET();ADS1118_CS3_SET();ADS1118_CS1_RESET();delay_us(1);ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);ADS1118_CS1_SET();//设置ADS1118_CS2初始化ADS1118_CS2_RESET();delay_us(1);ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);ADS1118_CS2_SET();if(sys_status.testFlag == 1)//仅非测试模式进行采集,降低采集时间{//设置ADS1118_CS3初始化ADS1118_CS3_RESET();delay_us(1);ADS1118_ReadWrite16Bit(VSEL_I_SET_Channel);ADS1118_CS3_SET();}ADS1118_Main(); //读取一次数据}void ADS1118_Main(void){unsigned int index = 0;//第1块ADS1118/ADS1118_CS2_SET();ADS1118_CS1_RESET();delay_us(1);ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);//配置下次读取的通道read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN0, ADS1118CS_AIN1);//开始读取通道0,并配置下次读取通道1read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN1, ADS1118CS_AIN2);//开始读取通道1,并配置下次读取通道2read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN2, ADS1118CS_AIN3);//开始读取通道2,并配置下次读取通道3read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN3, ADS1118CS_AIN0);//开始读取通道3,并配置下次读取通道4ADS1118_CS1_SET();//第2块ADS1118/ADS1118_CS2_RESET();delay_us(1);ADS1118_ReadWrite16Bit(ADS1118CS_AIN0);//配置下次读取的通道read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN0, ADS1118CS_AIN1);//开始读取通道0,并配置下次读取通道1read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN1, ADS1118CS_AIN2);//开始读取通道1,并配置下次读取通道2read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN2, ADS1118CS_AIN3);//开始读取通道2,并配置下次读取通道3read_vol_buf[index++] = GetADS1118Voltage(ADS1118CS_AIN3, ADS1118CS_AIN0);//开始读取通道3,并配置下次读取通道4ADS1118_CS2_SET();}

如果觉得《ADS1118 STM32模拟spi驱动(HAL)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。