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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
版本:RT-Thread nano 3.1.5 用CubeMX生成代码
  U. H% x# @. N2 x4 t环境:Clion搭配gcc工具链(可视作CubeIDE): |! M6 @' C+ J8 G; X
问题:rt_kprintf()貌似没有关联到串口
' {3 T1 j0 H; e2 }5 o4 k% E7 N! H0 }1 s' G& Q
下边是3.1.5版本board.c里自带的代码,文档中心里的代码应该也一样6 A$ U1 |+ d: L  C5 d

! p4 O! ~! t8 hstatic UART_HandleTypeDef UartHandle;
/ C  h) d* ~+ T+ s; n- astatic int uart_init(void). ?0 c2 I/ Z4 c  i) ~
{7 G+ r* n1 ]- f2 Y; F  t; z) Z
/* TODO: Please modify the UART port number according to your needs */6 y3 G! G" p( X& s3 t: ~  E: E9 c
UartHandle.Instance = USART2;0 j: H* ?, o! i; y
UartHandle.Init.BaudRate = 115200;! `8 P/ i6 _& w! n
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
0 a8 H$ r. q* }UartHandle.Init.StopBits = UART_STOPBITS_1;
. ]% \- v3 A* u* A* `UartHandle.Init.Parity = UART_PARITY_NONE;
, o3 ]1 J# c, Q4 k. E# P4 f( sUartHandle.Init.Mode = UART_MODE_TX_RX;
7 d, ~) n- a7 \5 R$ PUartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;3 C& W; V+ V/ S# M& a
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;7 w' _* `2 F, n1 }' ~
if (HAL_UART_Init(&UartHandle) != HAL_OK)5 m* O% }2 N: s, F! W+ X& V  a
{
9 f& w" F" b2 ywhile (1);4 {6 O  R+ p# M/ ?! n
}
3 z5 o8 K  Z/ K' Q0 |5 o( ]return 0;  Z! L0 a# Y. f# A9 R" I
}
% J; \. z* Q7 Z( L" Z& ]( OINIT_BOARD_EXPORT(uart_init);4 l9 q( @5 V2 n9 l
void rt_hw_console_output(const char str)" H+ H; D# r4 Z& I
{. {. ]) _! ]( R- }# r
rt_size_t i = 0, size = 0;' h6 d0 |+ m) p, R
char a = '\r';
3 _/ _! i5 S! U" l__HAL_UNLOCK(&UartHandle);8 p+ F# g7 L- F5 W/ d
size = rt_strlen(str);
$ b3 k5 ~7 d: h. u' {for (i = 0; i < size; i++)
1 v% K+ [$ P! i: ~" K# b{
0 a$ e5 d. O- [/ yif ((str + i) == '\n')
' S( v: Q# v0 W5 Y9 S: g{
5 s4 q# \3 t5 o0 N) dHAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);
7 ^+ K/ e5 ]3 W. W3 d, S0 t}
9 I# w6 _* m* n5 i: xHAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);$ _9 n+ ^* o- [5 ~5 A; \
}
) J# T& a5 e$ J) }5 h& I1 N}
7 Q/ |4 f8 M- k2 l) i# @  }4 P; _, q  V0 R3 ]3 }
直接kprintf之后串口完全没有反应
3 K7 o# f- t6 |# W* F  y! C0 K; Q) U; |; F' t- ~+ z
已经排除了硬件故障的可能,直接调用hal库的串口可以正常使用+ e. t! V2 S) k- h
进debug调试后发现kprintf时候完全在上面
1 ]2 a& s: a6 L: j) {: t- M
/ W; }& Z( S, W$ Irt_hw_console_output()里走了一遭,但串口一点反应都没给,推测问题是根本没关联到串口上,但怎么解决一直没找到/ F9 }4 E" \6 d5 z

该用户从未签到

2#
发表于 2022-10-18 14:30 | 只看该作者
串口初始化失败了呗。自己检查一下引脚复用配置。外设电源时钟配置等等。
. e5 Z: z/ s2 P

该用户从未签到

3#
发表于 2022-10-18 14:33 | 只看该作者
board.c里那个uart_init()根本没有关联上已经配置好的串口,得把那个删了再把uarthandle改成huartx就可以了,不过我不明白如果uart_init一点用都没有的话为什么要带上那个,是为了适配不同的芯片?/ j" P; g& h! K. a: q4 f+ m, S6 z

该用户从未签到

4#
发表于 2022-10-18 14:52 | 只看该作者
这个函数本来就是让你修改的,但是你没修改,直觉认为 cubemx 生成的代码和 rtt 无缝衔接了1 i; e* v! I! K9 V( o0 ]1 ]
正常操作流程应该是把 cubemx 生成的代码赋值粘贴到 rtt 原来对应的地方。  Y1 l, R+ V1 f

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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