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