一、IIC协议读写MCP4017
void MCP4017_Write(u8 val)
{
I2CStart();
I2CSendByte(0x5e);
I2CWaitAck();
I2CSendByte(val);
I2CWaitAck();
I2CStop();
}
u8 MCP4017_Read()
{
u8 val;
I2CStart();
I2CSendByte(0x5F);
I2CWaitAck();
val = I2CReceiveByte();
I2CSendNotAck();
I2CStop();
return val;
}
二、stm32cubeMX配置
1.由于PB15和PB12
这样设计电路的目的是:让PB14去采集MCP4017滑动变阻器上的电压,但是P12和PB14共用同一个ADC1,所以要使用通道优先级。
MCP4017最大是7位,100kΩ,按比列分配。
void disp_proc()
{
HAL_ADC_Start(&hadc1) ;
MCP_volt = HAL_ADC_GetValue(&hadc1) /4095.0f *3.3f ;//先扫描通道5
HAL_ADC_Start(&hadc1) ;
v38 = HAL_ADC_GetValue(&hadc1) /4095.0f *3.3f ; //在扫描通道11
HAL_ADC_Start(&hadc2) ;
v37 = HAL_ADC_GetValue(&hadc2) /4095.0f *3.3f ;
sprintf(text,"R37:%.2f ",v37);
LCD_DisplayStringLine(Line0,(u8*)text);
memset(text,'\0',sizeof(text));
sprintf(text,"R38:%.2f ",v38);
LCD_DisplayStringLine(Line2,(u8*)text);
memset(text,'\0',sizeof(text));
sprintf(text,"MCP_val:%.2f ",MCP_val);
LCD_DisplayStringLine(Line4,(u8*)text);
memset(text,'\0',sizeof(text));
sprintf(text,"MCP_volt:%.5f ",MCP_volt);
LCD_DisplayStringLine(Line6,(u8*)text);
memset(text,'\0',sizeof(text));
}