2024.1.27随堂笔记 ADC与I2C的应用
Copyright (c) 2024 by Jsir2022, All Rights Reserved.
CubeMX配置需要注意,如果引脚是黄色说明没配置好。红色的选项是不可用,因为有冲突。
一、ADC初始化配置和代码调用
如图,设置ADC时有不一样的地方。
单端模式:地和输入的电压差,如IN15
差分模式:两条线间的电压,如IN1~IN14
对于同一ADC1的不同输入通道,实际上共用一个寄存器,以DR结尾。(所以GPIOC->ODR实际上是GPIOC下的Output寄存器吧)
对于ADC2_IN15是勾上就行。但ADC1_IN5和ADC1_IN11需要改下面的Number Of conversion为2,然后设置Rank->Channel分别为5和11(这个先后顺序影响HAL_ADC_GetValue捕获的顺序)。还需要注意的是多通道扫描要更改采样时间,原先的2.5 Cycles太短了数值不正常,要改到比如247.5或者670 Cycles。
只需要以下四条函数
真正计算LSB的是
如果调试看到代码前面没有灰色矩形框,说明没编译。一般情况是没调用。
上场写AT24C02只需看芯片手册的图7、8、11这三张图。
根据手册读字节时序使用官方模拟I2C库实现读取AT24C02特定地址的一字节内容。
I2CStart();
I2CSendByte(AddrW);
I2CSendAck();
I2CSendByte(WordAddr);
I2CSendAck();
I2CStart();
I2CSendByte(AddrR);
I2CSendAck();
RX=I2CReceiveByte();
I2CSendNotAck();
I2CStop();
MCP4017手册重点关注页码36,41
数字电位器100K,根据下图可知最大可串联127颗电阻,每增加1颗增大787.402欧姆(典型值)
MCP4017的电阻相当于R2,那么分压计算公式为图右下角,但最终ADC出的值不一定和公式算出的一样,因为不是理想状态下的。