您好!
我正在通过 SPI 通信从 ADS1298 AFE 的寄存器读取和写入。 我的大师是 STM32F411CEU6。 我能够写入寄存器、但无法从寄存器读取。
我正在读取的寄存器是 ID 控制寄存器(地址:00h)。 我发送的操作码是
uint8_t opcode1 = 0x20;//表示地址
uint8_t opcode2 = 0x00;//寄存器-1
在发送操作码之前、我要将其设置为 SDATAC。 但仍然没有显示正确的值(应该为0x02、因为我使用的是1298)。 我得到的值为0x49。
下面给出了完整代码
while (1)
{
/*用户代码结束时间*/
/*用户代码开始3 */
uint8_t sdatac = 0x11;//待发送的数据
uint8_t opcode1 = 0x20;//要发送的数据
uint8_t opcode2 = 0x00;//要发送的数据
uint8_t rxData;
// SDATAC 配置
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_RESET);// CS 低电平
HAL_DELAY (10);
HAL_SPI_TRANSMIT (&hspi1、&sdatac、1、HAL_MAX_DELAY);//发送数据
HAL_DELAY (10);
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_SET);// CS 高电平
HAL_DELAY (100);
//////// SDATAC 配置完成//////////////
//从00h 寄存器读取
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_RESET);// CS 低电平
HAL_DELAY (10);
HAL_SPI_TRANSMIT (&hspi1、&opcode1、1、HAL_MAX_DELAY);//发送数据
HAL_DELAY (4);
HAL_SPI_TRANSMIT (&hspi1、&opcode2、1、HAL_MAX_DELAY);//发送数据
HAL_DELAY (100);
HAL_SPI_RECEIVE (&hspi1、&rxData、1、HAL_MAX_DELAY);//接收数据
HAL_DELAY (10);
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_SET);// CS 高电平
if (rxData == 0x02)
{
HAL_GPIO_WritePin (GPIOB、GPIO_PIN_4、GPIO_PIN_SET);// CS 低电平
}
////// 结尾处为////////////////
HAL_DELAY (1000);
}