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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
版本:RT-Thread nano 3.1.5 用CubeMX生成代码( F. Y" h$ Y; L
环境:Clion搭配gcc工具链(可视作CubeIDE)) m" d7 h( H1 ^& N
问题:rt_kprintf()貌似没有关联到串口
1 q$ Y1 k  a2 R1 [) ~& r+ P) U6 u3 H
2 J( v8 P7 Y! S9 `8 }3 p下边是3.1.5版本board.c里自带的代码,文档中心里的代码应该也一样
* L  A; F) w# f7 R
1 O3 r/ m% Y) @4 Ystatic UART_HandleTypeDef UartHandle;
! a5 A8 c1 r( q2 J# u7 E" Nstatic int uart_init(void)5 w& g- X6 V, H
{9 m+ O  C( x$ P: W7 N
/* TODO: Please modify the UART port number according to your needs */3 v' _/ l. L' y+ K% h
UartHandle.Instance = USART2;, i3 I( h+ e- r3 [# j
UartHandle.Init.BaudRate = 115200;/ Y6 m$ F( P% F: G2 D; p$ l
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
1 f* m$ }8 ]5 J8 [( t7 q/ tUartHandle.Init.StopBits = UART_STOPBITS_1;1 p2 m) Q+ s( L: E
UartHandle.Init.Parity = UART_PARITY_NONE;
+ w0 z' W7 n% iUartHandle.Init.Mode = UART_MODE_TX_RX;) \6 p% z2 s, s& G1 n/ n
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
) n! ^; r% _& x/ g; U5 lUartHandle.Init.OverSampling = UART_OVERSAMPLING_16;4 J& l" ~0 _# o; Y$ ~
if (HAL_UART_Init(&UartHandle) != HAL_OK)
5 [/ d/ O* G; U5 i( c3 @4 Q& J{
. j1 h5 X& e' Bwhile (1);
3 {  N! ?$ g2 j0 z: ]% G8 v}! B+ {4 h% P+ s9 x4 S
return 0;
# o, i4 a2 C: d! \5 j}
  j& u# q- H9 mINIT_BOARD_EXPORT(uart_init);( j) u/ n  `4 ?: O' r1 t* z
void rt_hw_console_output(const char str); N6 M+ {6 K; R3 X; m* ]4 x
{
% }/ g/ p' r2 @9 Y2 T7 K, }' ~rt_size_t i = 0, size = 0;
' C1 o! t" B* R* v2 o4 z. }4 w& Ichar a = '\r';
, t) }- s$ ^: i' P. Q7 C' w__HAL_UNLOCK(&UartHandle);+ x  N, [) v0 u3 Z
size = rt_strlen(str);; ]- q- Y" h! z$ v+ ]* r& w' K$ B
for (i = 0; i < size; i++)& X* a$ O3 q4 D" {/ V8 w- m; g( s
{
6 V! p4 B$ E& s% o1 M+ K& Yif ((str + i) == '\n')9 E9 R; z! N9 {& c5 z% Z2 Z
{4 l" E" z3 i, y  @8 E+ S6 ]# _, q; ^
HAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);6 Q# K; v" O$ S) v5 W
}
# ?& |! M6 Z3 h/ w  KHAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
7 P, C, V. K% w! _8 r6 H) K}# k. j. }/ a0 e
}
. k: K9 g/ h; r5 j) h
. A6 ?. ~" m- s+ u$ a0 O# _直接kprintf之后串口完全没有反应
2 h9 z& I2 ^3 [: R4 t# _8 d9 d
$ c* }- f$ E" f已经排除了硬件故障的可能,直接调用hal库的串口可以正常使用
4 i' w- {& }5 G5 Y9 v0 g$ s! ^. `进debug调试后发现kprintf时候完全在上面3 H. p# A9 N& ?) i1 f9 n
: T, Z2 ~+ ?* X7 \3 u! a0 `
rt_hw_console_output()里走了一遭,但串口一点反应都没给,推测问题是根本没关联到串口上,但怎么解决一直没找到
5 m$ V9 c- S* q

该用户从未签到

2#
发表于 2022-10-18 14:30 | 只看该作者
串口初始化失败了呗。自己检查一下引脚复用配置。外设电源时钟配置等等。9 M) q5 q# S5 l( E  H' ?

该用户从未签到

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

该用户从未签到

4#
发表于 2022-10-18 14:52 | 只看该作者
这个函数本来就是让你修改的,但是你没修改,直觉认为 cubemx 生成的代码和 rtt 无缝衔接了! h; ^! ?8 x$ Q
正常操作流程应该是把 cubemx 生成的代码赋值粘贴到 rtt 原来对应的地方。+ ]6 w+ N& _9 m

该用户从未签到

5#
发表于 2022-10-18 15:00 | 只看该作者
得改链接脚本否则不能正常自动初始化,cubeMX那边生成的代码没有问题可以直接用,就像GCC编译下finsh线程似乎没有正常的被初始化里面一样,只能说在gcc编译链下搞RT-Thread坑有点多, C0 N5 T8 e6 M! a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 17:30 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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