我在此问题上一直在努力
uint8_t *PMTK = "$PSIMIPR,W,115200*1C";
给我错误
初始化中的指针目标在签名[-wpointer-sign]
上有所不同
将其更改为char *
或unsigned char *
没有区别,并且const char *
导致该程序在以下代码中进一步投诉PMTK的位置:
if (HAL_UART_Transmit(&huart3, PMTK, 32, 2000) != HAL_TIMEOUT)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
}
else
{ ....
使用HAL驱动程序,该程序应该建立从STM32F0XX到GPS接收器(SIM33ELA(的UART通信。
是的,这是STM32 Cube Libs的真正烦人的角落。有人应该给他们一个很大的线索,即最好将随机阅读的缓冲区在c ... mumble中以 const void *
表示。
因此,要修复它:由于数据是文本为文本,因此使用字符串字面的文字很方便。因此,这样做然后将其施放在通话中:
const char PMTK[] = "$PSIMIPR,W,115200*1C";
if (HAL_UART_Transmit(&huart3, (uint8_t *) PMTK, strlen(PMTK), 2000) != HAL_TIMEOUT)
注意使用 strlen()
来获得适当的长度,硬编码文字值永远不是正确的选择,并且在这里被打破(字符串不是32个字符长(。我们可以使用sizeof
(毕竟这也是一个数组(,但是这更容易容易出错,因为您必须减去终结器的1。无论如何,我敢肯定编译器将优化此strlen()
调用。
c字符串被编译器视为char []。如果将铸件添加到(uint8_t *(之前,请在字符串安静下。
uint8_t *PMTK = (uint8_t *)"$PSIMIPR,W,115200*1C";