STM32CubeIDE調試問題匯總


1.采用單線半雙工無法發送數據問題

①用CubeMX配置好Single Wire(Half-Duplex)模式,其他的默認

②用CubeMX配置好Clock

③生成代碼后需要將HAL_UART_MspInit函數中的GPIO_Mode改為GPIO_MODE_AF_PP模式,需要將Pull改為GPIO_PULLUP,需要將Speed改為GPIO_SPEED_FREQ_HIGH。

1 /**USART1 GPIO Configuration
2 PA9     ------> USART1_TX
3 */
4 GPIO_InitStruct.Pin = GPIO_PIN_9;
5 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
6 GPIO_InitStruct.Pull = GPIO_PULLUP;
7 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
8 GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
9 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

④發送的時候需要啟動HAL_HalfDuplex_EnableTransmitter

⑤接收的時候需要啟動HAL_HalfDuplex_EnableReceiver

 1 static uint8_t data = 0x55;
 2 while (1)
 3 {
 4     HAL_HalfDuplex_EnableTransmitter(&huart1);
 5     HAL_UART_Transmit(&huart1, &data, 1, 0xffff);
 6     HAL_HalfDuplex_EnableReceiver(&huart1);
 7     HAL_Delay(1000);
 8 }

2.使用printf打印無輸出問題

由於CubeIDE沒有Keil的Use MicroLIB選項,而且CubeIDE默認采用的是GNUC編譯,所以putchar的接口有所不同

 1 #include <stdio.h>
 2 #ifdef __GNUC__
 3 #define PUTCHAR_REDEFINE int __io_putchar(int ch)
 4 #else
 5 #define PUTCHAR_REDEINFE int fputc(int ch, FILE *f)
 6 #endif
 7 PUTCHAR_REDEFINE
 8 {
 9     HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
10     return ch;
11 }

然后需要將項目設置中的這兩個選項打開

 

配合以上代碼重定義即可解決問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM