找回密码
 注册
关于网站域名变更的通知
查看: 254|回复: 4
打印 上一主题 下一主题

rt_kprintf()貌似没有关联到串口怎么解决?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-10-18 13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
版本:RT-Thread nano 3.1.5 用CubeMX生成代码
# {. g5 N" R, u5 d$ w( G9 M环境:Clion搭配gcc工具链(可视作CubeIDE)9 G0 z7 r- G: R+ h( Z+ B7 G2 k8 L" [
问题:rt_kprintf()貌似没有关联到串口
1 K! L9 M  |5 `5 S' k# C8 H3 a9 x$ y0 m: G; [! H
下边是3.1.5版本board.c里自带的代码,文档中心里的代码应该也一样
% p( {$ W' E  o+ ?0 C: J+ G3 \& U3 `
static UART_HandleTypeDef UartHandle;+ \# }8 x  c5 c( l
static int uart_init(void)
" e" p3 m" s( H: _% w" x) h{
2 `) o( r3 E/ k* u/* TODO: Please modify the UART port number according to your needs */
% h+ u0 ~& M7 Q5 yUartHandle.Instance = USART2;3 m4 V. o, M8 B: s7 ?* @0 ]! ~$ t0 j
UartHandle.Init.BaudRate = 115200;
7 t" Z4 l& G( O1 p5 XUartHandle.Init.WordLength = UART_WORDLENGTH_8B;. c5 S! s$ \9 Y/ w2 g& g
UartHandle.Init.StopBits = UART_STOPBITS_1;
+ G' j- c& i2 _9 ]% e! bUartHandle.Init.Parity = UART_PARITY_NONE;2 F5 V. O: A  R4 m" ?
UartHandle.Init.Mode = UART_MODE_TX_RX;, s' S$ _# T! \3 V+ ?* z
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;# I! e$ M8 a; B5 i4 ^4 N2 G0 X. o0 _  v
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
+ z. U9 y* n+ G- K8 s) K# L4 cif (HAL_UART_Init(&UartHandle) != HAL_OK)
/ G1 D/ R1 I# l0 H, K4 F! w{7 @+ f; O7 ^- }
while (1);
: x+ Q  e6 ^: ^}
6 N) |+ t5 W0 C- n  G( A7 Yreturn 0;0 w4 J) _- K5 w* B" ]4 K1 Z( Q
}
: }& j3 Q& F! Y  z% _2 @4 JINIT_BOARD_EXPORT(uart_init);5 O. y7 ~6 s) R' T6 ?
void rt_hw_console_output(const char str)/ c7 Z# |7 j& {7 r! C
{; m/ d; X1 r( _- V( C; E
rt_size_t i = 0, size = 0;. P& c. D4 o  N  ^1 m  m# {
char a = '\r';7 H0 C' A5 p/ F3 D
__HAL_UNLOCK(&UartHandle);- a9 `8 v0 z- o9 c* D$ {3 F
size = rt_strlen(str);7 `% L& ?6 u% \: W
for (i = 0; i < size; i++)8 B# a6 o! C0 J7 q: Y
{( B9 E, c) A; @, m" x3 t2 g$ F' W/ L' n
if ((str + i) == '\n')
1 N, D. p" O. F$ o' f{" S- z2 F" X# T  w4 U9 c
HAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);7 [+ J# M1 g& N$ w* j
}
; f  e; p/ B) sHAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);+ M) `$ k+ X2 ]4 `8 a
}% m2 m( {4 X4 T3 b$ |
}
4 m0 @5 ^+ V% J2 R! Y4 [5 @/ f: _
直接kprintf之后串口完全没有反应
  u1 i2 l* ]6 H; d- b$ o1 d" b+ ?7 F2 M8 p
已经排除了硬件故障的可能,直接调用hal库的串口可以正常使用
, O) |) C, E  @' W: z进debug调试后发现kprintf时候完全在上面5 B* |9 T# _' Q, S! p# I

; h0 D6 K  q+ v! S7 ort_hw_console_output()里走了一遭,但串口一点反应都没给,推测问题是根本没关联到串口上,但怎么解决一直没找到
% G" ]8 X$ o! X

该用户从未签到

2#
发表于 2022-10-18 14:30 | 只看该作者
串口初始化失败了呗。自己检查一下引脚复用配置。外设电源时钟配置等等。
+ {" U1 R9 |# h' I$ ?/ \8 W

该用户从未签到

3#
发表于 2022-10-18 14:33 | 只看该作者
board.c里那个uart_init()根本没有关联上已经配置好的串口,得把那个删了再把uarthandle改成huartx就可以了,不过我不明白如果uart_init一点用都没有的话为什么要带上那个,是为了适配不同的芯片?
1 g7 q; M* J; \* G% V6 z

该用户从未签到

4#
发表于 2022-10-18 14:52 | 只看该作者
这个函数本来就是让你修改的,但是你没修改,直觉认为 cubemx 生成的代码和 rtt 无缝衔接了) g4 k- X. k! o5 `1 h) P1 v
正常操作流程应该是把 cubemx 生成的代码赋值粘贴到 rtt 原来对应的地方。
/ f4 u4 v9 i7 P  t1 m. L2 c- S

该用户从未签到

5#
发表于 2022-10-18 15:00 | 只看该作者
得改链接脚本否则不能正常自动初始化,cubeMX那边生成的代码没有问题可以直接用,就像GCC编译下finsh线程似乎没有正常的被初始化里面一样,只能说在gcc编译链下搞RT-Thread坑有点多
+ S. g  w- \" j) d  c/ |/ F$ n4 ^( ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-11 05:09 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表