1.ADS1115简介

ADS1115是德州仪器推出的具有IIC接口的16位ADC转换器,超小型X2QFN或VSSOP 封装,低功耗(20uA),宽电压输入2.0V-5.5V,可编程数据转换速率8SPS-860SPS,四个单端输入或两个差分输入。可应用于,电池电压电流检测,低速便携式仪表以及温度测量系统中。

ADS1115简化方框图

VSSOP封装的ADS1115顶部视图

ADS1115典型电路连接

ADS1015模块原理图

2.引脚功能

引脚名称 类型 描述
ADDR 数字量输入 I2C 丛机地址选择
AIN0 模拟量输入 模拟量输入0通道
AIN1 模拟量输入 模拟量输入1通道
AIN2 模拟量输入 模拟量输入2通道
AIN3 模拟量输入 模拟量输入3通道
ALERT/RDY 数字量输出 比较器输出或转换就绪
GND 模拟量 接地
SCL 数字量输入 IIC时钟
SDA 数字量输入/输出 IIC数据线
VDD 模拟量 VCC(2.0V-5.5V)

3.功能介绍

3.1 噪声表现

3.3V供电下采样速率对分辨率的影响

3.2 Multiplexer 复用器

ADS1115包含一个输入多路器,四个单电压输入或者两个差分输入。AIN0和AIN1可以与AIN3进行差分测量,多路复用器由中的位MUX [2:0]配置。 测量单端信号时,ADC的负输入通过多路器内的开关内部连接到GND。

ADS1115内部输入多路器

输入电压必须满足以下公式:

3.3量程与分辨率

不同量程下对应的最小分辨率

3.4 采样速率与转换时间

采样速率可以由中的DR[2:0]位来控制,AD转换可以在一个周期内完成,因此转换时间为1/DR。

3.5数字比较器(在本次实验不使用)

ADS1115具有可编程的数字比较器,可以在ALERT/RD引脚上发出警报。Config寄存器中的COMP_MODE位将比较器配置为传统比较器或窗口比较器。 在传统的比较器模式下,当转换数据超过高阈值寄存器(Hi_thresh)中设置的限制时,ALERT / RDY引脚将置为有效(默认为低电平有效)。 然后,仅当转换数据降至低阈值寄存器(Lo_thresh)中设置的限制以下时,比较器才会置为无效。 在窗口比较器模式下,当转换数据超过Hi_thresh寄存器或低于Lo_thresh寄存器值时,ALERT / RDY引脚将置为有效。

在窗口模式或传统比较器模式下,均可将比较器配置为在被配置寄存器中的COMP_LAT位置位后锁存。即使输入信号未超出阈值寄存器的范围,此设置也将保留断言。只能通过发出SMBus警报响应或读取转换寄存器来清除此锁存的断言。可以通过Config寄存器中的COMP_POL位将ALERT / RDY引脚配置为高电平有效或低电平有效。
       两种比较器模式只有在一定数量的连续读数超过阈值寄存器中设置的阈值(Hi_thresh和Lo_thresh)之后,比较器也可以配置为激活ALERT / RDY引脚。 Config寄存器中的COMP_QUE [1:0]位将比较器配置为在激活ALERT / RDY引脚之前等待超过阈值的一,二或四个读数。 COMP_QUE [1:0]位还可以禁用比较器功能,并将ALERT / RDY引脚置于高电平状态

3.6 操作模式

ADS1115由两种模式,连续转换和单次转换,中的MODE位选择相应的工作模式。

3.6.1 单次转换

当中的MODE 位设置为1时,ADS1115进入掉电状态,并以单次转换模式工作,首次上电时,此状态时ADS的默认状态。尽管进入了掉电模式,但设备仍会响应命令。 ADS1115保持此掉电状态,直到将1写入中的操作状态(OS)位。当OS位有效时,器件将在大约25μs的时间内上电,将OS位复位为0,并开始单次转换。当转换的数据准备好后,设备会再次掉电。正在进行的转换时将1写入OS位无效。要切换到连续转换模式,请将0写入MODE中的MODE位。

3.6.2 连续转换

在连续转换模式(MODE位设置为0)下,ADS1115连续执行转换。转换完成后,ADS1115将结果放入转换寄存器,并立即开始另一次转换。配置新的设置时,当前正在进行的转换将使用先前的设置完成转换。此后,将开始使用新的设置进行连续转换。要切换到单次转换模式,请向配置寄存器的MODE位写入1或复位设备。

4. ADS1115 的IIC

4.1 IIC地址的选择

ADS1115具有一个地址引脚ADDR,用于设置器件的I2C地址。 该引脚可以是连接到GND,VDD,SDA或SCL,因此可以通过一对IIC引脚选择四个不同的地址。
       一般我们将地址位接GND,1001000,最后一位是确定IIC的写/读状态,写的时候是1,读的时候是0.所以slave address读写地址是0x90/0x91(10010000/10010001)

ADDR引脚连接和对应的从机地址

4.2 接收模式

ADS1115在从机接收模式下,主机发送到从机的第一个字节由7位设备地址组成,其次是低的R / W位。 主机发送的下一个字节是, ADS1115收到地址指针寄存器字节, 接下来的两个字节被写入地址由寄存器地址指针位P [1:0]给出。最后ADS1115返回字节。 数据寄存器字节为首先发送最高有效字节,然后发送最低有效字节。

4.3 发送模式

在从机发送模式下,主机发送的第一个字节是7位从机地址,后跟高R / W位。 该字节将从机设置为发送模式, 从机发送的字节是数据寄存器的最高有效字节,由数据寄存器地址指针位P [1:0]指示, 然后,其余的最低有效字节由从机发送。

4.4 写入和读取寄存器

要从ADS1115访问特定的寄存器,主机必须首先写一个适当的值到地址指针寄存器中的地址指针位P [1:0]。在从机地址字节,低R / W位和成功的从机确认之后,直接写入地址指针寄存器。写入地址指针寄存器后,从机应答,而主机发出STOP或重复的START条件。从ADS1115读取时,写入位P [1:0]的前一个值确定要读取的寄存器。要更改读取哪个寄存器,必须将新值写入P [1:0]。要将新值写入P [1:0],主机发出R / W位为低的从机地址字节,后跟地址指针寄存器字节。主机不必发送其他数据,并且可以发出STOP条件。如果需要重复读取同一寄存器,则无需连续发送地址指针寄存器,因为ADS1115会存储P [1:0]的值,直到被写操作修改为止。

从ADS1115读取时序图

读时序操作步骤:
   1.发送写地址给ADS1115(0x90);
   2.向地址指针寄存器写数据,后两位有效,只能写0x00,0x01,0x02,0x03;
   3.发送读地址给ADS1115(0x91);
   4.读取ADS1115的数据(两个字节,MSB先行);

写入ADS1115的时序图

写时序操作步骤:
   1.发送写地址给ADS1115(0x90);
   2.向地址指针寄存器写数据,后两位有效,只能写0x00,0x01,0x02,0x03;
   3.发送数据给ADS1115(高位在前)

4.5 数据格式

ADS1115以二进制补码格式提供16位数据。 正满量程(+ FS)输入时,输出的AD值代码为7FFFh,负满量程(-FS)输入时,输出的AD值代码为8000h。这些代码的输出为了提示超量程的提示。

输入信号与理想输出代码

输入电压与代码转换与的关系

5.寄存器

ADS1115具有四个寄存器,可通过I2C接口使用进行访问寄存器。 包含上一次转换的结果。 用于更改ADS1115工作模式并查询设备状态。 其他两个寄存器和 ,设置用于比较器功能的阈值。

5.1 地址指针寄存器(只写)

地址指针寄存器

地址指针寄存器字段说明

5.2 转换寄存器(P[1:0] = 0x00) [reset = 0x0000] (只读)

16位转换寄存器包含二进制二进制补码格式的最后一次转换结果。 上电后,转换寄存器清除为0,并保持0直到第一次转换完成。

16位转换寄存器

转换寄存器字段说明:16位转换结果

5.3配置寄存器(P[1:0] = 0x01) [reset = 8583h]

16位配置寄存器用于控制工作模式,输入选择,数据速率,满量程范围和比较器模式。

配置寄存器

bit 字段 类型 复位后值 描述
[15] OS 读/写 1H 运行状态或单次转换开始
该位确定设备的运行状态。
仅在掉电状态下才能编写OS,而在进行转换时则无效。
写时:
0:无效
1:开始单次转换(处于掉电状态)
读时::
0:设备正在进行转换
1:转换空闲
[14:12] MUX[2:0] 读/写 0H 输入多路复用器配置
这些位配置输入多路复用器
000:AINP = AIN0和AINN = AIN1(默认)
001 : AINP = AIN0 and AINN = AIN3
010 : AINP = AIN1 and AINN = AIN3
011 : AINP = AIN2 and AINN = AIN3
100 : AINP = AIN0 and AINN = GND
101 : AINP = AIN1 and AINN = GND
110 : AINP = AIN2 and AINN = GND
111 : AINP = AIN3 and AINN = GND
[11:9] PGA[2:0] 读/写 2H 可编程的增益放大器(量程的选择 )
这些位设置可编程增益放大器的FSR。
000 : FSR = ±6.144 V(1)
001 : FSR = ±4.096 V(1)
010 : FSR = ±2.048 V (default)
011 : FSR = ±1.024 V
100 : FSR = ±0.512 V
101 : FSR = ±0.256 V
110 : FSR = ±0.256 V
111 : FSR = ±0.256 V
[8] MODE 读/写 1H 设备运行方式
该位控制操作模式。
0:连续转换模式
1:单次模式或掉电状态(默认)
[7:5] DR[2:0] 读/写 4H 转换速率
这些位控制转换速率
000:8 SPS
001:16 SPS
010:32 SPS
011:64 SPS
100:128 SPS(默认)
101:250 SPS
110:475 SPS
111:860 SPS
[4] COMP_MODE 读/写 0H 比较器模式
该位控制比较器工作
0:传统比较器(默认)
1:窗口比较器
[3] COMP_POL 读/写 0H 比较器极性
该位控制ALERT / RDY引脚的极性
0:低电平有效(默认)
1:高电平有效
[2] COMP_LAT 读/写 0H 锁存比较器
该位控制ALERT / RDY引脚在被置为有效后锁存,还是在转换后处于上限和下限阈值范围之内清零。
0:非锁存比较器。 置位后ALERT / RDY引脚不锁存(默认)
1:锁存比较器。 置为有效的ALERT / RDY引脚保持锁存状态,直到转换数据由主服务器或适当的SMBus警报响应读取由主机发送。 设备以其地址响应,它是最低的当前声明ALERT / RDY总线的地址。
[2:0] COMP_QUE[1:0] 读/写 3H 比较器置位和禁用
这些位执行两个功能。 设置为11时,比较器被禁用,ALERT / RDY引脚被设置为高阻抗状态。 当设置为任何其他值时,将启用ALERT / RDY引脚和比较器功能,并且该设置值确定连续的转换次数超过在声明ALERT / RDY引脚之前所需的上限或下限阈值
00:一次转换后断言
01:两次转换后置位
10:四次转换后置位
11:禁用比较器并将ALERT / RDY引脚设置为高阻抗(默认)

5.4Lo_thresh (P[1:0] = 2H) [reset = 8000h]
     Hi_thresh (P[1:0] = 3H) [reset = 7FFFh]寄存器

比较器使用的上下阈值以二进制补码格式存储在两个16位寄存器。 比较器为数字比较器。 因此,只要更改PGA设置,就必须更新这两个寄存器中的值(使能比较器前提下)。 通过将Hi_thresh寄存器MSB设置为1并将Lo_thresh寄存器MSB设置为0,要使用ALERT / RDY引脚的比较器功能,Hi_thresh寄存器值必须始终大于 Lo_thresh寄存器值。

Lo_thresh寄存器

Hi_thresh寄存器

两个阈值寄存器描述

6.代码实现

说明:I2C_HandleTypeDef  为由STM32CubeMX自动生成的IIC初始化结构起
//i2c_ads1115.h
#ifndef __IIC_ADS1115_H
#define __IIC_ADS1115_H#include "i2c.h"#define ADS1115_WRITE_ADDRESS        0x90
#define ADS1115_READ_ADDRESS         0x91
//以下两个预处理作为配置寄存器预处理要更改其配在这里更改
//也可以添加新的预处理对不同通道的采集或者选取不同的采样速率等
#define CONFIG_REG_H     ADS1115_REG_CONFIG_OS_START|\ADS1115_REG_CONFIG_MUX_Diff_01|\ADS1115_REG_CONFIG_PGA_4|\ADS1115_REG_CONFIG_MODE_SINGLE
#define CONFIG_REG_L    ADS1115_REG_CONFIG_DR_128|\ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\ADS1115_REG_CONFIG_COMP_POL_LOW|\ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\ADS1115_REG_CONFIG_COMP_QUE_DIS/***************/
//配置寄存器说明//config register
/*CRH[15:8](R/W)BIT      15      14      13      12      11      10      9       8NAME     OS      MUX2    MUX1    MUX0    PGA2    PGA1    PGA0    MODE
CRL[7:0] (R/W)BIT      7       6       5       4       3       2       1       0NAME    DR0     DR1     DR0   COM_MODE COM_POL COM_LAT COM_QUE1 COM_QUE0-----------------------------------------------------------------------------------* 15    | OS             |  运行状态会单词转换开始*       |                | 写时:*       |                | 0   : 无效*       |                | 1   : 开始单次转换处于掉电状态时*       |                | 读时:*       |                | 0   : 正在转换*       |                | 1   : 未执行转换* -----------------------------------------------------------------------------------* 14:12 | MUX [2:0]      | 输入复用多路配置*       |                | 000 : AINP = AIN0 and AINN = AIN1 (default)*       |                | 001 : AINP = AIN0 and AINN = AIN3*       |                | 010 : AINP = AIN1 and AINN = AIN3*       |                | 011 : AINP = AIN2 and AINN = AIN3*       |                | 100 : AINP = AIN0 and AINN = GND*       |                | 101 : AINP = AIN1 and AINN = GND*       |                | 110 : AINP = AIN2 and AINN = GND*       |                | 111 : AINP = AIN3 and AINN = GND* -----------------------------------------------------------------------------------* 11:9  | PGA [2:0]      | 可编程增益放大器配置(FSR  full scale range)*       |                | 000 : FSR = В±6.144 V*       |                | 001 : FSR = В±4.096 V*       |                | 010 : FSR = В±2.048 V (默认)*       |                | 011 : FSR = В±1.024 V*       |                | 100 : FSR = В±0.512 V*       |                | 101 : FSR = В±0.256 V*       |                | 110 : FSR = В±0.256 V*       |                | 111 : FSR = В±0.256 V* -----------------------------------------------------------------------------------* 8     | MODE           | 工作模式*       |                | 0   : 连续转换*       |                | 1   : 单词转换* -----------------------------------------------------------------------------------* 7:5   | DR [2:0]       | 采样频率*       |                | 000 : 8 SPS*       |                | 001 : 16 SPS*       |                | 010 : 32 SPS*       |                | 011 : 64 SPS*       |                | 100 : 128 SPS (默认)*       |                | 101 : 250 SPS*       |                | 110 : 475 SPS*       |                | 111 : 860 SPS* -----------------------------------------------------------------------------------* 4     | COMP_MODE      | 比较器模式*       |                | 0   : 传统比较器 (default)*       |                | 1   : 窗口比较器* -----------------------------------------------------------------------------------* 3     | COMP_POL       | Comparator polarity*       |                | 0   : 低电平有效 (default)*       |                | 1   : 高电平有效* -----------------------------------------------------------------------------------* 2     | COMP_LAT       | Latching comparator*       |                | 0   : 非锁存比较器. (default)*       |                | 1   : 锁存比较器.* -----------------------------------------------------------------------------------* 1:0   | COMP_QUE [1:0] | Comparator queue and disable*       |                | 00  : Assert after one conversion*       |                | 01  : Assert after two conversions*       |                | 10  : Assert after four conversions*       |                | 11  : 禁用比较器并将ALERT/RDY设置为高阻抗 (default)* -----------------------------------------------------------------------------------
*///地址指针寄存器#define ADS1015_REG_POINTER_CONVERT     (0x00)
#define ADS1015_REG_POINTER_CONFIG      (0x01)
#define ADS1015_REG_POINTER_LOWTHRESH   (0x02)
#define ADS1015_REG_POINTER_HITHRESH    (0x03)
// 单次转换开始
#define ADS1115_REG_CONFIG_OS_START                     (0x1U << 7)//设备单词转换开启 高字节的最高位
#define ADS1115_REG_CONFIG_OS_NULL                      (0x0U << 7)
//输入引脚选择和输入方式选择
#define ADS1115_REG_CONFIG_MUX_Diff_01                  (0x0U << 4)  // 差分输入0引脚和1引脚
#define ADS1115_REG_CONFIG_MUX_Diff_03                  (0x1U << 4)  // 差分输入0引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_13                  (0x2U << 4)  // 差分输入1引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_23                  (0x3U << 4)  // 差分输入2引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_SINGLE_0                 (0x4U << 4)  //单端输入 0
#define ADS1115_REG_CONFIG_MUX_SINGLE_1                 (0x5U << 4)  //单端输入 1
#define ADS1115_REG_CONFIG_MUX_SINGLE_2                 (0x6U << 4)  //单端输入 2
#define ADS1115_REG_CONFIG_MUX_SINGLE_3                 (0x7U << 4)  //单端输入 3//量程选择
#define ADS1115_REG_CONFIG_PGA_6                        (0x0U << 1) // +/- 6.1144
#define ADS1115_REG_CONFIG_PGA_4                        (0x1U << 1) // +/- 4.096
#define ADS1115_REG_CONFIG_PGA_2                        (0x2U << 1) // +/- 2.048
#define ADS1115_REG_CONFIG_PGA_1                        (0x3U << 1) // +/- 1.024
#define ADS1115_REG_CONFIG_PGA_05                       (0x4U << 1) // +/- 0.512
#define ADS1115_REG_CONFIG_PGA_02                       (0x5U << 1) // +/- 0.256//运行方式#define ADS1115_REG_CONFIG_MODE_SINGLE              (0x1U << 0)  //  单次
#define ADS1115_REG_CONFIG_MODE_CONTIN              (0x0U << 0)  //连续转换//转换速率#define ADS1115_REG_CONFIG_DR_8                     (0x0U << 5)
#define ADS1115_REG_CONFIG_DR_16                    (0x1U << 5)
#define ADS1115_REG_CONFIG_DR_32                    (0x2U << 5)
#define ADS1115_REG_CONFIG_DR_64                    (0x3U << 5)
#define ADS1115_REG_CONFIG_DR_128                   (0x4U << 5)
#define ADS1115_REG_CONFIG_DR_250                   (0x5U << 5)
#define ADS1115_REG_CONFIG_DR_475                   (0x6U << 5)
#define ADS1115_REG_CONFIG_DR_860                   (0x7U << 5)//比较器模式
#define ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL    (0x0U << 4)//默认
#define ADS1115_REG_CONFIG_COMP_MODE_WINDOW         (0x1U << 4)#define ADS1115_REG_CONFIG_COMP_POL_LOW         (0x0U << 3)//默认
#define ADS1115_REG_CONFIG_COMP_POL_HIG         (0x1U << 3)#define ADS1115_REG_CONFIG_COMP_LAT_NONLATCH        (0x0U << 2)
#define ADS1115_REG_CONFIG_COMP_LAT_LATCH           (0x1U << 2)#define ADS1115_REG_CONFIG_COMP_QUE_ONE         (0x0U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_TWO         (0x1U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_THR         (0x2U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_DIS         (0x3U << 0)void ads1115_config_register(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
int16_t ads1115_read_data(I2C_HandleTypeDef ads1115_I2cHandle);
double ads1115_get_voltage_val(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
#endif
//i2c_ads1115.c
#include "i2c_ads1115.h"
#include "usart.h"
#include "stdlib.h"void ads1115_config_register(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL)
{uint8_t reg_data[3]={pointADD,configH,configL};while(HAL_I2C_Master_Transmit(&ads1115_I2cHandle, ADS1115_WRITE_ADDRESS, reg_data, 3, 1000) != HAL_OK){if(HAL_I2C_GetError(&ads1115_I2cHandle) != HAL_I2C_ERROR_AF){printf("ads1115 Config Register error!!!\r\n");}}
}
int16_t ads1115_read_data(I2C_HandleTypeDef ads1115_I2cHandle)
{int16_t data;uint8_t rx_data[2]={0};while(HAL_I2C_Master_Transmit(&ads1115_I2cHandle, ADS1115_WRITE_ADDRESS, 0x00, 1, 1000) != HAL_OK){if(HAL_I2C_GetError(&ads1115_I2cHandle) != HAL_I2C_ERROR_AF){printf("ads1115 convert Register error!!!\r\n");}}while(HAL_I2C_Master_Receive(&ads1115_I2cHandle, ADS1115_READ_ADDRESS, rx_data, 2, 1000) != HAL_OK){if(HAL_I2C_GetError(&ads1115_I2cHandle) != HAL_I2C_ERROR_AF){printf("ads1115 read data error!!!\r\n");}}data=rx_data[0]*256+rx_data[1];return data;
}double ads1115_get_voltage_val(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL)
{double val;int16_t ad_val;ads1115_config_register(ads1115_I2cHandle,pointADD,configH,configL);HAL_Delay(10);ad_val=ads1115_read_data(ads1115_I2cHandle);if((ad_val==0x7FFF)|(ad_val==0X8000))//是否超量程了{ad_val=0;printf("over PGA\r\n");}switch((0x0E&configH)>>1)//量程对应的分辨率{case(0x00):val=(double)ad_val*187.5/1000000.0;//break;case(0x01):val=(double)ad_val*125/1000000.0;break;case(0x02):val=(double)ad_val*62.5/1000000.0;break;case(0x03):val=(double)ad_val*31.25/1000000.0;break;case(0x04):val=(double)ad_val*15.625/1000000.0;break;case(0x05):val=(double)ad_val*7.8125/1000000.0;break;}return val;}
//main.c
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "i2c_ads1115.h"
int main(void)
{double val;HAL_Init();SystemClock_Config();MX_I2C1_Init(); //IIC初始化MX_USART1_UART_Init();//串口初始化HAL_Delay(100);while(1){
val=ads1115_get_voltage_val(hi2c1,0x01,CONFIG_REG_H,CONFIG_REG_L);printf("val is %f\r\n",val);HAL_Delay(1000);}

结果:

由于手头没有电位器和万用变暂时可以确定采集结果正确。

实验结果

作者:特维斯的电磁炉
链接:https://www.jianshu.com/p/e0b448995316
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

STM32学习笔记之IIC(1) ADS1115 - 简书 (jianshu.com)

STM32学习笔记之IIC(1) ADS1115相关推荐

  1. STM32学习笔记(9)——(I2C续)读写EEPROM

    STM32学习笔记(9)--(I2C续)读写EEPROM 一.概述 1. 背景介绍 2. EEPROM简介 二.AT24C02--常用的EEPROM 1. 电路原理图 2. 写操作 (1)按字节写操作 ...

  2. STM32学习笔记之OLED屏

    STM32学习笔记--OLED屏 OLED屏的特点: 1.  模块有单色和双色可选,单色为纯蓝色,双色为黄蓝双色(本人选用双色): 2.  显示尺寸为0.96寸 3.  分辨率为128*64 4.   ...

  3. stm32学习笔记----双串口同时打开时的printf()问题

    stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其 ...

  4. STM32学习笔记 | 引起电源和系统异常复位的原因

    关注+星标公众号,不错过精彩内容 每一块处理器都有复位的功能,不同处理器复位的类型可能有差异,引起复位的原因也可能有多种. STM32的复位功能非常强大,可通过软件.硬件和一些事件触发系统复位,而且通 ...

  5. 《STM32学习笔记》4——核心功能电路与编程(下)

    接上文,文中的图片,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.蜂鸣器驱动 1.蜂鸣器介绍 2.蜂鸣器电路 3.蜂鸣器程序 二. MIDI 音乐 ...

  6. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  7. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  8. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  9. STM32学习笔记(15)——SPI协议

    STM32学习笔记(15)--SPI协议 一.SPI协议简介 1. 物理层 2. 协议层 (1) 通讯的开始与停止 (2)时钟极性CPOL.时钟相位CPHA 二.STM32的SPI外设 1. 通讯引脚 ...

  10. crh寄存器_牛人的STM32学习笔记(寄存器版本).doc

    牛人的STM32学习笔记(寄存器版本) 一.GPIO口的配置 STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个双向IO组成.并且没个IO口均可配置成8种模 ...

最新文章

  1. 【CyberSecurityLearning 52】Web架构安全分析(web工作机制、HTTP协议)
  2. CocoaPods was not found 解决
  3. CodeSmith 5.0工具实例篇系列4——根据表生成修改的存储过程,针对MS Sqlserver
  4. Java 深copy 浅copy 引用copy
  5. 中断、轮询、事件驱动、消息驱动、数据流驱动(Flow-Driven)?
  6. 聊聊Elasticsearch的Iterables
  7. 在java中什么管理内存_Java是如何管理内存
  8. 2021年华为杯数学建模参赛经验分享
  9. 六、配置基于 IP 子网划分 VLAN 示例
  10. rf扫描枪_RF枪操作的简要步骤
  11. box-sizing属性的理解
  12. Discuz论坛超漂亮手机模板
  13. 2019,焉知非福,决胜新城
  14. 支付宝sdk集成,报系统繁忙 请稍后再试(ALI64)
  15. 上海房产税免征--积分或居住证
  16. 易语言c源码流程图怎么实现,易语言APC内存注入主要流程源码
  17. 2013年08月威海之旅
  18. 大连理工大学计算机学院院长,大连理工大学计算机学院姚念民教授团队最新成果被人工智能顶级期刊TNNLS录用...
  19. CentOS7中安装Tomcat8
  20. LED灯驱动电源的七条经验

热门文章

  1. 微信域名防封接口开发
  2. 微信特殊字符php,PHP方法处理微信昵称特殊符号过滤
  3. 边缘计算研究热点地图
  4. chrome最简单的多开方法
  5. 2022年蓝桥杯砍竹子
  6. SNK,作为程序后缀的时候,是.net中的强密匙加密文件
  7. lattice若干bug
  8. 苏宁“北京攻略”:老阵地,新战场 | 一点财经
  9. 北京专精特新企业申报攻略
  10. (三) SiamRPN从论文角度介绍