接上集(上午发了一半,差点累亖)
调试
搞过硬件的都知道,这个事情就没有你们简单的,即使是数据手册里面写的那么简单:
脆弱瞬间

用的4 线 SPI。
在 main()
中加入 ADC 上电后稳定延时(建议 ≥ 200us):
HAL_Delay(1); // 上电后延时 ≥ 200us,确保 ADC 准备好
在 main()
中 MX_GPIO_Init()
之后加入:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET); // 确保 CS 默认高电平
对,这个就是 bug,先拉高,
使用USB CDC 输出替代串口
打开 STM32CubeMX
在 Peripherals 栏中启用:
Connectivity > USB_DEVICE → Communication Device Class (Virtual Port Com)
设置参数:
Mode : Device_Only
Class For FS IP : Communication Device Class (CDC)
会自动启用:USB_OTG_FS ,并使用 PA11
(DM), PA12
(DP)
修改 main.c
:替代 fputc
int _write(int file, char *ptr, int len)
{
while (CDC_Transmit_FS((uint8_t *)ptr, len) == USBD_BUSY)
{
HAL_Delay(1);
}
return len;
}
批量发送整串字符串 ,而不是一字节一字节发。你可以这样(最终的代码使用了这个):
char usb_buf[64];
while (1)
{
uint16_t adc_raw = MDC97476_ReadRaw();
float voltage = MDC97476_ConvertToVoltage(adc_raw, 3.3f);
int len = sprintf(usb_buf, "ADC = %u, Voltage = %.3f V\r\n", adc_raw, voltage);
CDC_Transmit_FS((uint8_t*)usb_buf, len);
HAL_Delay(1000);
}