EDA365电子论坛网

标题: rt_kprintf()貌似没有关联到串口怎么解决? [打印本页]

作者: abc66    时间: 2022-10-18 13:11
标题: rt_kprintf()貌似没有关联到串口怎么解决?
版本:RT-Thread nano 3.1.5 用CubeMX生成代码; @; o4 ?; V4 o" c5 Q
环境:Clion搭配gcc工具链(可视作CubeIDE)
! L0 d, x7 X5 m9 Z9 w4 E1 I问题:rt_kprintf()貌似没有关联到串口
$ ?' V8 c6 u3 h2 l9 r: A" x/ ^1 J3 J2 F
下边是3.1.5版本board.c里自带的代码,文档中心里的代码应该也一样2 o- S. J) K7 \- u7 i+ F5 i
) |% f* d- o" ~8 k# I+ [2 C
static UART_HandleTypeDef UartHandle;
! L0 t. k7 U  K& ]8 b8 F* Z, F/ ~static int uart_init(void)6 G- f. @8 u% Y% Q
{
2 N8 W/ w3 e5 l3 x( E3 z7 z/* TODO: Please modify the UART port number according to your needs */( Q2 ?/ E0 C" c. J: z
UartHandle.Instance = USART2;
. ~. d0 m4 f' y; y0 zUartHandle.Init.BaudRate = 115200;
$ z6 D4 h& m# nUartHandle.Init.WordLength = UART_WORDLENGTH_8B;
- q* g6 Z% y) d% N! e. E6 a. r! WUartHandle.Init.StopBits = UART_STOPBITS_1;' m5 e& h9 e8 g: k1 t. p
UartHandle.Init.Parity = UART_PARITY_NONE;7 g! I( {  g+ f+ ~; x2 t
UartHandle.Init.Mode = UART_MODE_TX_RX;
+ x. `' P# n* k& K' GUartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
2 W, r) z9 Q0 F: I$ E5 @UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
, I" {, J+ V( a& gif (HAL_UART_Init(&UartHandle) != HAL_OK)
: ^/ z9 B+ S) A0 x{/ n* n0 @5 T/ J" [, d; L9 F; T3 t; l
while (1);
" j( Z; G; z7 h5 |& M/ S}
3 J3 `' [8 ^1 k# q% e1 k- S" ^2 Ureturn 0;
% C! a/ e% C0 O0 ?+ m}
7 f+ l- I+ q, d8 m7 x+ z  K1 SINIT_BOARD_EXPORT(uart_init);
1 }4 Q& Z: h" B& T) qvoid rt_hw_console_output(const char str)
( z% }( ^- u; A& R{" C; ]  ^8 J& C& m3 `3 g$ [& B
rt_size_t i = 0, size = 0;
6 W1 @  s* u  I9 Rchar a = '\r';% F( l! D% W6 |( t  W
__HAL_UNLOCK(&UartHandle);
( O# F7 U* P1 J" e9 u2 a7 P' Lsize = rt_strlen(str);7 E  d  A! f8 g0 X) b* T
for (i = 0; i < size; i++)
: \; B6 y" j0 M% G% n# z* Z0 n{2 Q" H. D" {  R5 U/ S
if ((str + i) == '\n')8 B; \3 w+ n6 C# C; ^( d
{& e7 x5 C6 v) G$ J; ~
HAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);
* l# X- e9 z. X8 y}7 H+ h# j% i* m' r% w/ K) @
HAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
8 z9 i' m! |# X}
1 w! X/ D. _) V" t}
7 d, m6 n; I7 w& \& N1 J6 L( {% O
直接kprintf之后串口完全没有反应  _2 C. ]5 \& Q  I. U
$ a5 N3 O2 i. u2 X* H6 ]
已经排除了硬件故障的可能,直接调用hal库的串口可以正常使用
  [# {+ f0 r+ y( i0 N+ y进debug调试后发现kprintf时候完全在上面7 e& H3 l+ ?2 _. S6 [) x

3 e9 [$ R" D% i/ y" c; Frt_hw_console_output()里走了一遭,但串口一点反应都没给,推测问题是根本没关联到串口上,但怎么解决一直没找到0 R  Y/ ^% ?! h7 L8 N1 C" ^1 G9 P

作者: itch    时间: 2022-10-18 14:30
串口初始化失败了呗。自己检查一下引脚复用配置。外设电源时钟配置等等。  f6 H+ S! ]' e

作者: mqerew    时间: 2022-10-18 14:33
board.c里那个uart_init()根本没有关联上已经配置好的串口,得把那个删了再把uarthandle改成huartx就可以了,不过我不明白如果uart_init一点用都没有的话为什么要带上那个,是为了适配不同的芯片?8 C& \9 y5 M4 r" V. b

作者: lahhse    时间: 2022-10-18 14:52
这个函数本来就是让你修改的,但是你没修改,直觉认为 cubemx 生成的代码和 rtt 无缝衔接了
0 g) j8 ~0 i3 S正常操作流程应该是把 cubemx 生成的代码赋值粘贴到 rtt 原来对应的地方。
' M) b  h. A# f6 F, E: \6 x
作者: land    时间: 2022-10-18 15:00
得改链接脚本否则不能正常自动初始化,cubeMX那边生成的代码没有问题可以直接用,就像GCC编译下finsh线程似乎没有正常的被初始化里面一样,只能说在gcc编译链下搞RT-Thread坑有点多  z1 p& D# h. U  n  n! p8 b





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2