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 z
UartHandle.Init.BaudRate = 115200;
$ z6 D4 h& m# n
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
- q* g6 Z% y) d% N! e. E6 a. r! W
UartHandle.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' G
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
2 W, r) z9 Q0 F: I$ E5 @
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
, I" {, J+ V( a& g
if (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 U
return 0;
% C! a/ e% C0 O0 ?+ m
}
7 f+ l- I+ q, d8 m7 x+ z K1 S
INIT_BOARD_EXPORT(uart_init);
1 }4 Q& Z: h" B& T) q
void 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 R
char a = '\r';
% F( l! D% W6 |( t W
__HAL_UNLOCK(&UartHandle);
( O# F7 U* P1 J" e9 u2 a7 P' L
size = 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; F
rt_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