1、串口重定向问题,在MDK与STM32cubeide中,存在编译器不同的问题,因此MDK上使用的串口重定向在cubeide上不能正常工作,使用这个代码可以实现全兼容。

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);
    return ch;
}
#endif

2、串口在工作中,寄存器中的值如果没有被读取,下一个值又发过来了,会造成overrun错误,直接死机,在中断中判断标志位并且清楚标志位也没办法正常工作,目前根据我的想法有两种解决思路:
第一种是在初始化的时候直接将overrun判断禁用掉,这样做造成的后果是可能会造成数据丢失。初始化的方式在这里:

1.png

第二种方式就是使用环形缓冲数组的方式读取,fifo的传输读取方式能够有效的避免数据丢失,同时减少在终端里面停留的时间,往后写一篇ringbuff的实现方式。

3、还是得多看看手册,光用cubemx生成代码很多细节的东西学不到,光是串口的中断就有十几种,如果不看的话根本不知道还有这种东西。

2022.5.30 补充如下:------------------------->
4、cubeIDE有时候会抽风,具体表现为在编辑页面可以打开两个一摸一样的头文件,修改其中一个另一个并不会被修改,可能头文件中的函数传入类型与c文件中的不一样,编译不通过,需要注意。