GD32使用CS1237通过ADC采集温度

这篇具有很好参考价值的文章主要介绍了GD32使用CS1237通过ADC采集温度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GD32使用CS1237通过ADC采集温度

一.CS1237的配置文档

读和写的命令cs1237温度补偿,GD32,单片机,stm32,嵌入式硬件
cs1237温度补偿,GD32,单片机,stm32,嵌入式硬件
注:需要注意PGA的放大倍数,不要超出了CS1237的输入的范围,要不然会输出最大值。
cs1237温度补偿,GD32,单片机,stm32,嵌入式硬件

二.源码

CS1237.h文件

 
#ifndef __CS1237_H__
#define __CS1237_H__
  
#include "gd32f30x.h"
#include "delay.h"



#define CLK_TIME 50 // max 50us
//************************************************************************************************************
typedef enum
{
	C1237_PIN_0=GPIO_PIN_0,
	C1237_PIN_1=GPIO_PIN_1,
	C1237_PIN_2=GPIO_PIN_2,
	C1237_PIN_3=GPIO_PIN_3,
	C1237_PIN_11=GPIO_PIN_11,
	C1237_PIN_12=GPIO_PIN_12,
	C1237_PIN_14=GPIO_PIN_14,
	C1237_PIN_15=GPIO_PIN_15,
}C1237_GPIO;
//************************************************************************************************************
typedef enum
{
	C1237_RCUG=RCU_GPIOG,
	C1237_RCUE=RCU_GPIOE,
}C1237_GPIO_RCU;
//************************************************************************************************************
typedef enum
{
	C1237_PORTG=GPIOG,
	C1237_PORTE=GPIOE,
}C1237_GPIO_PORT;
//************************************************************************************************************
typedef enum
{
	C1237_10HZ = 0,
	C1237_40HZ = 1,
	C1237_640HZ = 2,
	C1237_1280HZ = 3
}C1237_SPEED;
//************************************************************************************************************
typedef enum
{
	C1237_PGA_1 = 0,
	C1237_PGA_2 = 1,
	C1237_PGA_64 = 2,
	C1237_PGA_128 = 3
}C1237_PGA;
//************************************************************************************************************
typedef enum
{
	C1237_CHA = 0, //adc channel
	C1237_RST = 1, //cheap reserved
	C1237_TEM = 2, //temperature test
	C1237_INS = 3 //internal short
}C1237_CHN;
/************************************************************************************************************
Function: C1237_OneClk();
Return value: void
Discription: C1237 input a clk pusle for to read or write
Example:
  C1237_OneClk();
*************************************************************************************************************/
void C1237_OneClk(C1237_GPIO_PORT CS1237_CLK_PORT,C1237_GPIO CS1237_CLK_PIN);
/************************************************************************************************************
Function: CS1237_ReadReg();
Return value: u8
Discription: read CS1237 register
Example:
  CS1237_ReadReg();
*************************************************************************************************************/
int16_t CS1237_ReadReg(C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT);
/************************************************************************************************************
Function: C1237_WriteReg(u8 mData);
Return value: void
Discription: wreite data to C1237 register
Example:
  C1237_WriteReg(mData);
*************************************************************************************************************/
void C1237_WriteReg(int16_t mData,C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT);
 
/************************************************************************************************************
Function: C1237_Init(BOOL refOutable,C1237_SPEED msel,C1237_PGA mselPga,C1237_CHN mselChn);
Return value: void
Discription: CS1237 init
Example:
  C1237_Init(0,C1237_10HZ,C1237_PGA_1,C1237_CHA);//ref voltage out disable,speed 10Hz,Pga 1, work at Adc mode
*************************************************************************************************************/
 void C1237_Init(unsigned char refOutable, C1237_SPEED msel, C1237_PGA mselPga, C1237_CHN mselChn,C1237_GPIO_RCU CS1237_Data_RCU,C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT);
/************************************************************************************************************
Function: C1237_ReadResult();
Return value: u32
Discription: read C1237 A/D result
Example:
  C1237_ReadResult();
*************************************************************************************************************/
int32_t C1237_ReadResult(C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT);

float resistance_to_temprature(float resistance);

extern int32_t ADC_REG_REG_SET;
 
#endif

CS1237.c文件

/*
* Copyright (c) 2006-2022, yang Team
*
* SPDX-License-Identifier: NONE
*
*Change Logs:
* Date           Author            Notes
* 2022-xx-xx     linchenuyang      first implementation
*/
 
#include "cs1237.h"


#define  CS1237_Data_PIN_STATE()   gpio_input_bit_get(CS1237_Data_PORT,CS1237_Data_PIN)

//*************************************************************************************************************
void CS1237_Data_IS_Out_HIGH(C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO CS1237_Data_PIN)
{
    gpio_init(CS1237_Data_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, CS1237_Data_PIN);	
    gpio_bit_write(CS1237_Data_PORT,CS1237_Data_PIN,SET);				
 
}
//*************************************************************************************************************
void CS1237_Data_IS_Out_LOW(C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO CS1237_Data_PIN)
{
    gpio_init(CS1237_Data_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, CS1237_Data_PIN);	
    gpio_bit_write(CS1237_Data_PORT,CS1237_Data_PIN,RESET);		
 
}
//*************************************************************************************************************
void CS1237_Data_IS_INPUT(C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO CS1237_Data_PIN)
{
	gpio_init(CS1237_Data_PORT, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, CS1237_Data_PIN);	
    gpio_bit_write(CS1237_Data_PORT,CS1237_Data_PIN,SET);
 
}
//*************************************************************************************************************
void CS1237_Data_IS_INPUT_LOW(C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO CS1237_Data_PIN)
{
    gpio_init(CS1237_Data_PORT, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, CS1237_Data_PIN);	
    gpio_bit_write(CS1237_Data_PORT,CS1237_Data_PIN,RESET);
 
}
//*************************************************************************************************************
void CS1237_SCLK_HIHG(C1237_GPIO_PORT CS1237_CLK_PORT,C1237_GPIO CS1237_CLK_PIN)
{	
	gpio_init(CS1237_CLK_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, CS1237_CLK_PIN);	
    gpio_bit_write(CS1237_CLK_PORT,CS1237_CLK_PIN,SET);
 
}
//*************************************************************************************************************
void CS1237_SCLK_LOW(C1237_GPIO_PORT CS1237_CLK_PORT,C1237_GPIO CS1237_CLK_PIN)
{
    gpio_init(CS1237_CLK_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, CS1237_CLK_PIN);	
    gpio_bit_write(CS1237_CLK_PORT,CS1237_CLK_PIN,RESET);
}
//*************************************************************************************************************
void C1237_OneClk(C1237_GPIO_PORT CS1237_CLK_PORT,C1237_GPIO CS1237_CLK_PIN)
{
    CS1237_SCLK_HIHG(CS1237_CLK_PORT,CS1237_CLK_PIN);
	  delay(CLK_TIME);
    CS1237_SCLK_LOW(CS1237_CLK_PORT,CS1237_CLK_PIN);
    delay(CLK_TIME);
}
//*************************************************************************************************************
int16_t CS1237_ReadReg(C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT)
{
    int16_t i = 0;
    int16_t tem = 0;
    CS1237_SCLK_LOW(CS1237_CLK_PORT,CS1237_CLK_PIN);
		delay(50);//Wakeup MCU
    CS1237_Data_IS_INPUT(CS1237_Data_PORT,CS1237_Data_PIN); //输入模式
    while (CS1237_Data_PIN_STATE())//需要实际工程使用需要加入超时
		{
        i++;
        delay_1ms(1);//ms
		}
    for (i = 0; i < 27; i++) // 1-26th CLK
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
 
    CS1237_Data_IS_Out_HIGH(CS1237_Data_PORT,CS1237_Data_PIN); //Force High  cs1237 direction input
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN); // 28th CLK
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN); // 29th CLK
    //
    tem = 0xAC; // PIN out 	//读命令(0x56)左移1位	
    for (i = 0; i < 7; i++) // 30~36th CLK
    {
 
        if (tem & 0x80)
        CS1237_Data_IS_Out_HIGH(CS1237_Data_PORT,CS1237_Data_PIN);
        else
        CS1237_Data_IS_Out_LOW(CS1237_Data_PORT,CS1237_Data_PIN);
				tem <<= 1;
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
   
    }
    CS1237_Data_IS_INPUT( CS1237_Data_PORT,CS1237_Data_PIN); // cs1237 change to output direction
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN); // 37th CLK
 
    for (i = 0; i < 8; i++) // 37~45th CLK
    {
        tem <<= 1;
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
        if (CS1237_Data_PIN_STATE())
            tem++;
    }
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
    ; // 46th CLK
    return tem;
}
// End of CS1237_ReadReg()
//*************************************************************************************************************
void C1237_WriteReg(int16_t mData,C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT)
{
    int16_t i = 0;
    int16_t tem = 0;
    CS1237_SCLK_LOW(CS1237_CLK_PORT,CS1237_CLK_PIN);
		delay(50);//Wakeup MCU
    CS1237_Data_IS_INPUT( CS1237_Data_PORT,CS1237_Data_PIN);
    while (CS1237_Data_PIN_STATE())//需要实际工程使用需要加入超时
		{  
     		i++;
        delay_1ms(1);//ms
		}
    for (i = 0; i < 27; i++) // 1~26th CLK
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
   
    //C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);//27th CLK
		CS1237_Data_IS_Out_HIGH(CS1237_Data_PORT,CS1237_Data_PIN); // force high
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN); // 28th CLK
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN); // 29th CLK
    tem = 0xCA;//写命令(0x65)左移1位	
    for (i = 0; i < 7; i++) // 30~36th CLK
    {
 
        if (tem & 0x80)
        CS1237_Data_IS_Out_HIGH(CS1237_Data_PORT,CS1237_Data_PIN);
        else
        CS1237_Data_IS_Out_LOW(CS1237_Data_PORT,CS1237_Data_PIN);
				tem <<= 1;
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
       
    }
    CS1237_Data_IS_Out_HIGH(CS1237_Data_PORT,CS1237_Data_PIN);        // direction chage to intput direction
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);          // 37th CLK
    for (i = 0; i < 8; i++) // 38~45th CLK
    {
 
        if (mData & 0x80)
            CS1237_Data_IS_Out_HIGH(CS1237_Data_PORT,CS1237_Data_PIN);
        else
           CS1237_Data_IS_Out_LOW(CS1237_Data_PORT,CS1237_Data_PIN);
        mData <<= 1;
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
    }
		CS1237_Data_IS_INPUT( CS1237_Data_PORT,CS1237_Data_PIN);
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN); // 46th CLK
		
}
// End of C1237_WriteReg(u8 mData)
//*************************************************************************************************************
int32_t ADC_REG_REG_SET;
void C1237_Init(unsigned char refOutable, C1237_SPEED msel, C1237_PGA mselPga, C1237_CHN mselChn,C1237_GPIO_RCU CS1237_Data_RCU,C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT)
{
  volatile int16_t tem = 0;
 
  tem= ((refOutable&0x1)<<6)|((msel&0x03)<<4)|((mselPga&0x03)<<2)|((mselChn&0x03)<<0);
	
	rcu_periph_clock_enable(CS1237_Data_RCU);//PG时钟使能
	
	ADC_REG_REG_SET = tem;
   C1237_WriteReg(tem,CS1237_Data_PIN, CS1237_CLK_PIN,CS1237_Data_PORT,CS1237_CLK_PORT);
}
// End of C1237_Init(BOOL refOutable,C1237_SPEED msel,C1237_PGA mselPga,C1237_CHN mselChn)
//*************************************************************************************************************
int32_t C1237_ReadResult(C1237_GPIO CS1237_Data_PIN,C1237_GPIO CS1237_CLK_PIN,C1237_GPIO_PORT CS1237_Data_PORT,C1237_GPIO_PORT CS1237_CLK_PORT)
{
    int16_t i;
    int32_t rdata = 0;
    CS1237_SCLK_LOW(CS1237_CLK_PORT,CS1237_CLK_PIN);
		delay(50);//Wakeup MCU
    CS1237_Data_IS_INPUT( CS1237_Data_PORT,CS1237_Data_PIN);
    while (CS1237_Data_PIN_STATE())//需要实际工程使用中断替换
		{
		   i++;
       delay_1ms(1);//ms
		}
    for (i = 0; i < 24; i++)
    {
        rdata <<= 1;
        C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
        if (CS1237_Data_PIN_STATE()) // read data
            rdata++;
    }
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
    C1237_OneClk(CS1237_CLK_PORT, CS1237_CLK_PIN);
    return rdata;
}
// End of C1237_ReadResult()

ADC值转温度文件(使用的PT1000)

#define LOW_LIMIT_TEMP 	(-1)            //最低温度8度
#define MAX_LIMIT_TEMP  (1)          //最高温度150度

// PT1000分度表   8~ 150度
const float PT1000_Table[143]=
{
    1031.23, 1035.13,	//8 ~ 9
    1039.03, 1042.92, 1046.82, 1050.71, 1054.60, 1058.49, 1062.38, 1066.27, 1070.16, 1074.05,	//10 ~ 19
    1077.94, 1081.82, 1085.70, 1089.59, 1093.47, 1097.35, 1101.23, 1105.10, 1108.98, 1112.86,	//20 ~ 29
    1116.73, 1120.60, 1124.47, 1128.35, 1132.21, 1136.08, 1139.95, 1143.82, 1147.68, 1151.55, 	//30 ~ 39
    1155.41, 1159.27, 1163.13, 1166.99, 1170.85, 1174.70, 1178.56, 1182.41, 1186.27, 1190.12,	//40 ~ 49
    1193.97, 1197.82, 1201.67, 1205.52, 1209.36, 1213.21, 1217.05, 1220.90, 1224.74, 1228.58,	//50 ~ 59
    1232.42, 1236.26, 1240.09, 1243.93, 1247.77, 1251.60, 1255.43, 1259.26, 1263.09, 1266.92,	//60 ~ 69
    1270.75, 1274.58, 1278.40, 1282.23, 1286.05, 1289.87, 1293.70, 1297.52, 1301.33, 1305.15,	//70 ~ 79
    1308.97, 1312.78, 1316.60, 1320.41, 1324.22, 1328.03, 1331.84, 1335.65, 1339.46, 1343.26,	//80 ~ 89
    1347.07, 1350.87, 1354.68, 1358.48, 1362.28, 1366.08, 1369.87, 1373.67, 1377.47, 1381.26,	//90 ~ 99
    1385.06, 1388.85, 1392.64, 1396.43, 1400.22, 1404.00, 1407.79, 1411.58, 1415.36, 1419.14, 	//100 ~ 109
    1422.93, 1426.71, 1430.49, 1434.26, 1438.04, 1441.82, 1445.59, 1449.37, 1453.14, 1456.91,	//110 ~ 119
    1460.68, 1464.45, 1468.22, 1471.99, 1475.75, 1479.52, 1483.28, 1487.04, 1490.81, 1494.56, //120 ~ 129
	  1498.32, 1502.08, 1505.84, 1509.59, 1513.35, 1517.10, 1520.85, 1524.60, 1528.39, 1532.14,  //130 ~ 139
	  1535.85, 1539.59, 1543.34, 1547.08, 1550.82, 1554.57, 1558.31, 1562.05, 1565.78, 1569.52, //140 ~ 149
	  1573.26   //150
};

/******************************************************************************
 函数名   : resistance_to_temprature(float resistance)
 功能     : 计算PT1000阻值对应的温度
 输入参数 : 阻值
 返回值   : 温度值
******************************************************************************
*/
float resistance_to_temprature(float resistance)
{
    int i=0;
    float 	 temprature;

    if (resistance < PT1000_Table[0]) //超出范围
    {
        return LOW_LIMIT_TEMP;
    }

    if (resistance > PT1000_Table[142])//超出范围
    {
        return MAX_LIMIT_TEMP;
    }
    
		while(i<143)
		{
		    if (resistance < PT1000_Table[i])
        {
          break;
        }
				i++;
		}

    temprature = 8+i;

    return temprature;
}

主函数调用方法

float ADC_REG_REG;
float ADC_TEMPERATURE;
C1237_Init(0,C1237_40HZ,C1237_PGA_1,C1237_CHA,C1237_RCUG,C1237_PIN_2,C1237_PIN_3,C1237_PORTG,C1237_PORTG);																				// 0Cs1237初始化 
delay_1ms(50); 
ADC_REG_REG=C1237_ReadResult(C1237_PIN_2,C1237_PIN_3,C1237_PORTG,C1237_PORTG)/4068060.199*1000;
delay_1ms(50);
ADC_TEMPERATURE=resistance_to_temprature(ADC_REG_REG);

三.引用

1.在C1237_Init初始化函数中设置好CS1237的工作模式和设置DO和SCLK接脚;
2.调用C1237_ReadResult函数,设置DO和SCLK接脚;文章来源地址https://www.toymoban.com/news/detail-770677.html

到了这里,关于GD32使用CS1237通过ADC采集温度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字温度计方案芯片CS7193

    CS7193_T16E是带LCD显示的1位小数数字温度计电路。可以通过外部PIN脚,选择摄氏度显示(℃)或者华氏度显示(℉),并通过开关按键完成单位切换。它还包括了测试模式,自动关闭电源和报警功能等。CS7193_T16E适合应用在临床及家用数字温度计等领域。其特点如下: 1、测量范

    2023年04月08日
    浏览(34)
  • STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

    12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定

    2024年02月06日
    浏览(74)
  • 用STM32单片机ADC+NTC热敏电阻采集温度的设计思路 | 附参考电路

    目录 前言 一、热敏电阻NTC 二、参考电路  三、激励电压选择 记录一些我在工作和学习过程中遇到的问题 NTC:在淘宝随便买的 单片机型号:STM32G030C8T6 目的:用单片机采集NTC温度 本文主要是介绍关于NTC激励电压的选择        热敏电阻 NTC(Negative Temperature Coefficient) , 直

    2024年02月02日
    浏览(40)
  • STM32--ADC数值采样/附ADC采集热敏传感器使用

    目录 一丶ADC介绍 二丶ADC工作原理及管脚分布 三丶代码部分详解 (一)库函数介绍 (二)代码部分整合         ADC模块中文名为模拟/数字转换器,是12位逐次逼近型的模拟数字转换器,一般用于数值的采样   可以将引脚上连续变化的模拟电压转换为内存中存储的数字变

    2024年02月03日
    浏览(42)
  • STM32使用内部参考电压提高ADC采集准确度

    我们在使用ADC采集外部电压时,一般默认参考电压为MCU的供电电压,例如单片机供电电压为3.3V时,我们计算采集电压的公式为: 但是如果因为某些原因导致的供电不稳定,而我们任然按照3.3V计算,ADC采集计算出来的电压就会出现误差。 在STM32手册中关于ADC的介绍中提到使用

    2024年02月15日
    浏览(28)
  • STM32+HAL库使用ADC轮询模式采集音频信号

    ADC模块:咪头声音采集模块 缺点:占用CPU的使用率         软件开始ADC转换后,一直等到转换完成后,才向后执行,这个代码在初始化ADC之后执行一次校准(不执行这一步也可以,但精度可能会低一些);然后就可以使用ADC轮询转换了,只需要三步: 启动转换 、 等待转

    2024年02月15日
    浏览(37)
  • RTC补偿 将核心算法集成在主控MCU中运行,在硬件上增加低成本的温度传感器和晶振,通过软件和硬件的配合

    概览 小华HC32F460/HC32L196芯片,将核心算法集成在主控MCU中运行,在硬件上增加低成本的温度传感器和晶振,通过软件和硬件的配合,实现和时钟芯片一样的带有温补功能的高精度RTC,并专门制作了相关的软硬件DEMO。 方案特点 使用小华HC32F460PETB/HC32L196PCTA作为系统主控 支持三

    2024年04月28日
    浏览(33)
  • 《嵌入式 – GD32开发实战指南》第12章 ADC

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK GD32F2系列有 3 个逐次逼近型的ADC,精度为 12 位,有18个多路复用通道,可以转换来自16个外部通道和2个内部通道的模拟信号。其中ADC0 和 ADC1都有 16 个外部通道, ADC2 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部

    2023年04月08日
    浏览(59)
  • stm32-CS100A 超声波测距芯片原理及代码解读

            CS100A 是苏州顺憬志联新材料科技有限公司(www.100sensor.com)推出的一款工 业级超声波测距芯片,CS100A 内部集成超声波发射电路,超声波接收电路,数字处理电 路等,单芯片即可完成超声波测距,测距结果通过脉宽的方式进行输出,通信接口兼容 现有超声波模块

    2024年02月04日
    浏览(137)
  • STM32L051使用HAL库操作实例(14)- ADC采集电压

    目录 一、前言 二、ADC外设简要说明 三、STM32CubeMX配置(本文使用的STM32CubeMX版本为6.1.2) 1.MCU选型 2.时钟使能 3.外部时钟配置 4.串口配置 5.ADC引脚配置 6.配置STM32CubeMX生成工程文件 7.点击GENERATE CODE生成工程文件 四、工程源码 五、运行状态 一、前言 本文主要介绍通过HAL库搭建

    2024年01月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包