struct {
uint32_t baud_rate;
uint8_t code;
} valid_speed_map[] = {
{ 9600, 0xB0 },
{ 19200, 0xB1 },
{ 38400, 0xB2 },
{ 57600, 0xB3 },
{ /*115200, 115607, 114942, 125000, 113636*/119047, 0xB4 } /* 虽然有响应,但是实际上不能通信 */
};
for (int i = 1; i < 5 - 1; ++i) {
printf("%x %d\n", valid_speed_map[i].code,valid_speed_map[i].baud_rate);
}
运行结果:
uint8_t resp_buffer[256];
static int
renesas_send_recv_cmd(uint8_t cmd, const uint8_t *p, uint16_t p_len, uint16_t r_len, uint8_t *buf, uint32_t timeout)
{
renesas_rx_count = 0;
while((USART6->SR & USART_SR_TXE) != USART_SR_TXE) { }
USART6->DR = cmd;
for(uint32_t i = 0; i < p_len; ++i) {
while((USART6->SR & USART_SR_TXE) != USART_SR_TXE) { }
USART6->DR = p[i];
}
while((USART6->SR & USART_SR_TC) != USART_SR_TC) { }//传送已完成就跳过
if(r_len) {
ms1Sleep = 0;
while(renesas_rx_count < r_len && ms1Sleep <= timeout) { }
if(renesas_rx_count < r_len) {
return -1;
}
memcpy(buf, Rec_U1, r_len);
}
return 0;
}
renesas_send_recv_cmd(UNLOCK/*0xF5*/, (uint8_t[]) { 0xDF, 0xFF, 0x0F, 0x07,
0xBC, 0xDE, 0xAD, 0xDD, 0xD4, 0x81, 0x89 }, 3 + 1 + 7, 0, NULL, 0);