您好!
我在具有 SMT32F767的定制设计 PCB 上有一个外部12位 ADC (ADS7886)。 该 ADC 与具有 SPI 的微处理器相连。 现在、我的问题是我无法正确读取数字化值。 可能是由于 ADC 驱动错误或 SPI 设置错误。 根据 ADC 数据表、我应该将 ADC SCK 设置为20MHz、但我无法使用 SPI 实现这一点。 由于我只能使用 SPI 设置13.5Mbit/s 或26Mbit/s 的波特率(时钟设置超过1Mbit/s)、因此时钟信号失真、类似于不完全的方形)。 那么、如何正确驱动 ADC 并读取数字化值呢?
谢谢你
此主代码:
void ADC_Conversion_for_Voltage_Transtents () { HAL_GPIO_WritePin (ADC_CS_GPIO_Port、ADC_CS_Pin、GPIO_PIN_RESET); HAL_SPI_Receive (&hspi4、ADC_buf、2、100); HAL_GPIO_WritePin (ADC_CS_GPIO_Port、 ADC_CS_Pin、GPIO_PIN_SET); 采样=(((uint16_t) ADC_buf[1])<< 8 | ADC_buf[0]); //采样= 0x0 << 12 | ADC_buf; 电压=(float)(采样*(5.0 / 4096.0));// DATA_IN=<6TES16] ;VOLT =(float)
SPI 设置:
/* SPI4初始化函数*/ static void MX_SPI4_Init (void) { /* SPI4参数配置*/ hspi4.instance = SPI4; hspi4.Init.Mode = SPI_MODE_MASTER; hspi4.Init.DIRECTION = SPI_DIRECTION_2LINES;hspi4.InIT.Spi_polarity = SPI_RATI.Spi_RIST_HSPI4 ;HSPI4_INIT_INIT.Spolarity = SPI_BIT.BIT.UST_RASIT_HSD hspi4.Init.CLKPhase = SPI_PHASE_2EDGE; hspi4.Init.NSS = SPI_NSS_Soft; hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; hspi4.Init.FirstBit = SPI_FIRSTBIT_BADDRESCAST_DISABET_TIMESCAST_4;hTITMDSF_INIT_INIT_INIT_DITDITDITDIT4.TDITDIT_DITDITON_DIT hspi4.Init.CRCalaculy = SPI_CRCCALLion_disable; hspi4.Init.CRCPolynomial = 7; hspi4.Init.CRCCLhelength = SPI_CRC_LENGTH_DATAZE; hspi4.Init.NSSPMode = SPI_NSS_pule_disable; if (H_OK)= HSI_4 (HAL_HAL! _Error_Handler (__file__、__line__); }
我随附了以下图表结果:
带有黄色双相方波的 ADC 输入模拟信号。
带黄色图的 ADC SCK 信号和带绿色图的 ADC CS 信号。
带黄色图的 ADC SCK 信号和带绿色图的 ADC SDO 信号。
在 Keil IDE 的调试模式期间、变量的值由什么来获取。