STM32F103读取TMC2226寄存器异常问题求助
TMC2226寄存器读取异常问题排查
我根据TMC2226数据手册,已通过STM32的UART4正常实现寄存器写入操作,对应的写寄存器代码及CRC校验代码如下:
void MOTOR_Send_Command(const uint8_t *Data, uint8_t RegAddr) { //[0:7] sync + reserved = 0xA0 //[8:15] 8 bit node address = 0 //[16:23]RW+7 bit register addr W = 1; R = 0 //[24:55]32 bit data //[56:63]CRC uint8_t datagram[8] = {0x05, 0x00}; datagram[2] = RegAddr | 0x80; for (int i = 3, j = 0; i < 7; ++i, ++j) { datagram[i] = Data[j]; } swuart_calcCRC(datagram, 8); HAL_UART_Transmit(&huart4, datagram, 8, 0xFF); }
void swuart_calcCRC(uint8_t *datagram, uint8_t datagramLength) { int i, j; uint8_t *crc = datagram + (datagramLength - 1);//在数据的最后开辟一个位 uint8_t currentByte; *crc = 0; for (i = 0; i < (datagramLength - 1); i++) { // Execute for all bytes of a message currentByte = datagram[i]; // Retrieve a byte to be sent from Array for (j = 0; j < 8; j++) { if ((*crc >> 7) ^ (currentByte & 0x01)) // update CRC based result of XOR operation { *crc = (*crc << 1) ^ 0x07; } else { *crc = (*crc << 1); } currentByte = currentByte >> 1; } // for CRC bit } // for message byte }
但读取TMC2226寄存器时遇到问题:仅能读取第一个字节,其余字节无法获取,读寄存器代码如下:
void MOTOR_ReadRegister(uint8_t *data, uint8_t RegAddr) { uint8_t datagram[4] = {0x05, 0x00}; datagram[2] = RegAddr & 0x7F; swuart_calcCRC(datagram, 4); HAL_UART_Transmit(&huart4, datagram, 4, 0xFF); HAL_UART_Receive(&huart4, data, 8, 0xFF); }
使用串口助手读取到的结果始终为:05 00 00 00 00 00 00 00。
我已尝试以下操作,但均未解决问题:
- 将代码中
datagram[2] = RegAddr & 0x7F;修改为datagram[2] = RegAddr & 0xEF; - 通过串口修改SENDDELAY寄存器
读写操作的数据结构示意图:
- 写操作数据报结构:

- 读操作数据报结构:

- 读操作回复数据报结构:

请问该问题是与UART4的读取方式有关,还是TMC2226的设置存在错误?恳请提供建议或见解。
内容的提问来源于stack exchange,提问作者Heisenberg Martinez
相关产品推荐
相关产品推荐

