你好,我在NUCLEOF412ZG平台上,打算用UART1去发AT指令给外部设备通信,用下面的代码发现不能通信成功,请帮忙看看是什么原因呢?谢谢!
printf("start \r\n"); UARTSerial test_serial = UARTSerial(PA_9, PA_10, 9600); ATCmdParser at = ATCmdParser(&test_serial, "\r\n"); at.send("AT") && at.recv("OK"); at.send("AT+CCID") && at.recv("+CCID: %20[^\n]\nOK\n", &value); printf("value = %d \r\n", value);
有没可以正常使用的示范代码呢?
我再做了个测试,就一直只调用 at.send("BBAA"), 发送字符串BBAA出去,我用另外一块NUCLEOF412ZG的板子的UART1来接收,发现接收到的ASCII码值为: 0x0d 0x0a 0x42 0x41 0x41, 后面0x42 代表是B,0x41代表是A
所以结果看起来比较奇怪,增加了两个字节 0x0d 0x0a的输出,但是吃掉了一个"B"
更新一下,原来的问题已经Fix了,Fix的方法:
波特率设置成57600,并且进行下面寄存器的设置。
RCC->CFGR &= ~0x0000E000; // PPRE2, Bit 15-13 RCC->CFGR |= 0x00008000; // PPRE2: PCLK2 = AHB / 2
但是发现把波特率设置成9600后,还是不行。
不知道CFGR寄存器应该怎么设置了。
另外一个方面来说,为什么通过API设置成57600后,还需要手动设置CFGR寄存器呢?
是說 UARTSerial test_serial = UARTSerial(PA_9, PA_10, 57600); 後還是要更新RCC->CFGR嗎?可以看一下這裡: https://github.com/ARMmbed/mbed-os/issues/4609 https://os.mbed.com/questions/78373/UART-Nucleo-STM32F411/
如果是確定是bug的話,可以再mbed-os的github上開issue.