我一直在努力解决这个问题
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通信。
答案 0 :(得分:2)
是的,这是STM32 Cube库的一个非常恼人的角落。有人应该给他们一个很大的线索,即随机只读缓冲区在C ... mumble中最好用const char PMTK[] = "$PSIMIPR,W,115200*1C";
if (HAL_UART_Transmit(&huart3, (uint8_t *) PMTK, strlen(PMTK), 2000) != HAL_TIMEOUT)
表示。
所以,修复它:由于数据是文本的,因此使用字符串文字会很方便。所以,这样做,然后在电话中投入,而不是:
strlen()
注意使用sizeof
来获得正确的长度,硬编码的文字值永远不是正确的选择,并且在此处被破坏(字符串不是32个字符长)。我们也可以使用strlen()
(毕竟它是一个数组),但由于必须为终结符减去1,因此更容易出错。无论如何,我很确定编译器会优化这个{{1}}调用。
答案 1 :(得分:1)
c编译器将字符串视为char []。如果在String之前向(uint8_t *)添加强制转换,则警告将被静音。
uint8_t *PMTK = (uint8_t *)"$PSIMIPR,W,115200*1C";