[原创] 【21楼】【CubeMX遇到的问题】串口打印:RX TX配置了,但生成代码中没有,要单....

辛昕   2023-9-3 23:16 楼主

2023.09.07

问题解决,主要原因:对CubeMX不够熟悉,自行添加的gpio重新初始化了io导致首字符乱码。

其他细节,详见 #21楼

 

因为是第一次用STM32CubeMX,所以,即使是以往很简单很基础的东西,都是百度搜索,跟着来。

一般一款MCU到手,我第一件事都是调通串口,方便打印调试。

这次也不例外。

 

比方说这个,STM32G030F6P6,USART1 为 20 和 1 脚,分别为 PB7 PB6

1693753820976.png  

 

生成代码加入打印,先单个字符,三次打印 "def"

1693753945910.png    

然而接入串口,并没有,蒙蔽。

 

中间,因为这是一块新板子,并且也是很久之后第一次用Cube的HAL库,所以做过一些其他的初步验证,例如gpio点亮LED,一切正常。

逐个打开 HAL的一系列初始化函数,惊讶地发现没有对 UART1_TX UART1_RX的引脚初始化——

其实一开始也怀疑,是不是HAL函数里已经有了。

 

但现在怀疑就是这个问题。

所以单独加入

1693754076648.png  

先只处理TX脚

1693754101971.png  

GPIOB的RCC时钟,HAL的初始化函数里还是有的,所以不管,只是少了io的配置而已。

然后就可以了。

 

当然,还有个问题,第一个字符是乱码。

1693754153005.png  

检查了一下十六进制,的的确确多了一个F8

1693754182622.png  

 

本帖最后由 辛昕 于 2023-9-7 10:48 编辑
强者为尊,弱者,死无葬身之地

回复评论 (21)

这里,其实是两个问题

1、为什么CubeMX生成的代码,没有初始化RX TX的引脚,很奇怪。

2、第一个字符是乱码的问题。

关于这个,查了一下,试过什么改 TXE为TC——这个话说以前标准库时我也遇到过

还有什么调换 UART_GPIO初始化和UART初始化的,但这个我完全不行,因为我一改就完全发不出。

 

强者为尊,弱者,死无葬身之地
点赞  2023-9-3 23:17

相对来说,其实我更担心第一个问题。

因为第二个问题是代码问题,是个老问题。

第一个问题却是这个工具的问题。

 

HAL库的问题多,这个早有耳闻,但没想到这么基础的都有问题,实在让人操心——

当然,我现在不那么纠结了,毕竟是体现自己存在的价值,如果例程拿来就能用——

当然,这也不是说 ST提供的HAL库确实混账得很。

 

强者为尊,弱者,死无葬身之地
点赞  2023-9-3 23:19

用了多年了,有生成,这么多人用的东西。没弄明白不要瞎喷


点赞  2023-9-4 12:08
引用: 辛昕 发表于 2023-9-3 23:17 这里,其实是两个问题 1、为什么CubeMX生成的代码,没有初始化RX TX的引脚,很奇怪。 2、第一个字符 ...

CubeMX生成的代码,是有对外设进行初始化的,在uart.c或者main.c有初始化函数,它会在初始化UART的时候调用的。

点赞  2023-9-4 14:04

%G1QYH8X49GU$E@E}TC8P.png  

应该有上面的出来,自己要加入输入输出中断允许上图的后面那句

还有回调函数:这个回调函数是里面就有一个相同的函数 但加了__weak 意思是用户如果有相同的函数就优先用用户的,如果你没有这个,也不出错,只是不方便干活。。。

  YEKQN$XHQDB%1_RX6R8AH$N.png    

本帖最后由 damiaa 于 2023-9-4 14:55 编辑
点赞  2023-9-4 14:52
引用: dql2016 发表于 2023-9-4 12:08 用了多年了,有生成,这么多人用的东西。没弄明白不要瞎喷

不信可以看这个,很简单,只是串口1.

 

uart1.rar (13.54 MB)
(下载次数: 0, 2023-9-4 14:54 上传)


 
强者为尊,弱者,死无葬身之地
点赞  2023-9-4 14:54
引用: damiaa 发表于 2023-9-4 14:52   应该有上面的出来,自己要加入输入输出中断允许上图的后面那句 还有回调函数:这个回调函数 ...

不涉及输入和回调,只是单纯输出

强者为尊,弱者,死无葬身之地
点赞  2023-9-4 14:55
引用: damiaa 发表于 2023-9-4 14:52   应该有上面的出来,自己要加入输入输出中断允许上图的后面那句 还有回调函数:这个回调函数 ...

我上传了一个,你可以看看,我也想知道设置少了哪里才导致这个问题

强者为尊,弱者,死无葬身之地
点赞  2023-9-4 14:55
引用: wangerxian 发表于 2023-9-4 14:04 CubeMX生成的代码,是有对外设进行初始化的,在uart.c或者main.c有初始化函数,它会在初始化UART的时候调 ...

main.c里是肯定没有的,只有uart1的初始化,没涉及到uart1的rx tx的gpio

至于uart1.c没这个文件。

只有hal_uart.c 和 hal_uart_ex.c

强者为尊,弱者,死无葬身之地
点赞  2023-9-4 14:56

我刚才用stm32cubeide生成了一个:

static void MX_USART2_UART_Init(void)
{

  /* USER CODE BEGIN USART2_Init 0 */

  /* USER CODE END USART2_Init 0 */

  /* USER CODE BEGIN USART2_Init 1 */

  /* USER CODE END USART2_Init 1 */
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART2_Init 2 */

  /* USER CODE END USART2_Init 2 */

}

 

本帖最后由 damiaa 于 2023-9-4 15:00 编辑
点赞  2023-9-4 14:58
引用: damiaa 发表于 2023-9-4 14:58 我刚才用stm32cubeide生成了一个: static void MX_USART2_UART_Init(void) { /* USER CODE BEG ...

对啊,只有这个,莫有rx tx的gpio初始化

强者为尊,弱者,死无葬身之地
点赞  2023-9-4 15:02
引用: 辛昕 发表于 2023-9-4 14:56 main.c里是肯定没有的,只有uart1的初始化,没涉及到uart1的rx tx的gpio 至于uart1.c没这个文件。 ...

工程有吗?我看看,我倒没有遇到这种问题。用的是哪个版本的CubeMX?

点赞  2023-9-4 15:37
引用: wangerxian 发表于 2023-9-4 15:37 工程有吗?我看看,我倒没有遇到这种问题。用的是哪个版本的CubeMX?

有的,工程我发在7楼了。

版本是最新在ST官方下载的,6.9.1

1693814294481.png  

强者为尊,弱者,死无葬身之地
点赞  2023-9-4 15:58

~{`EFB}WSF902}15FC@1(BD.png   这个里面帮你弄了

这个函数是在

I]P9A8X5X5C@5KS%EWYQ15G.png  

  里面调用的,所以你不用管了。

本帖最后由 damiaa 于 2023-9-4 16:21 编辑
点赞  2023-9-4 16:18

发送函数数据缓冲一般搞个全局变量数组看看如何。

点赞  2023-9-4 16:36
引用: damiaa 发表于 2023-9-4 16:18   这个里面帮你弄了 这个函数是在     里面调用的,所以你不用管了。

刚看了,确实有,可是为什么就不行呢,真奇怪。

加了就行

强者为尊,弱者,死无葬身之地
点赞  2023-9-4 16:40
辛昕 发表于 2023-9-4 16:40 刚看了,确实有,可是为什么就不行呢,真奇怪。 加了就行

是不是你生成的和你手动写的不一样?你可以对照一下。而且你的只是设置了一下这个引脚为输出,好像没设置位串口IO。可能问题不是在这里。

发送函数数据缓冲搞个全局变量数组看看如何。

本帖最后由 damiaa 于 2023-9-4 17:23 编辑
点赞  2023-9-4 17:18

CubeMX生成的代码,是有对外设进行初始化的,例如定时器你还需要自己打开  

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2023-9-6 16:09
引用: 秦天qintian0303 发表于 2023-9-6 16:09 CubeMX生成的代码,是有对外设进行初始化的,例如定时器你还需要自己打开  

确实如此。

我对CubeMX还不够熟悉,在慢慢熟悉

强者为尊,弱者,死无葬身之地
点赞  2023-9-7 10:39
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复