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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
版本:RT-Thread nano 3.1.5 用CubeMX生成代码3 O1 l- D- `1 _- h. P, D" d
环境:Clion搭配gcc工具链(可视作CubeIDE)
+ a6 |$ ^; `7 V' Q/ k1 _  v' u1 _9 O. X问题:rt_kprintf()貌似没有关联到串口1 r, G$ K- A* m$ v; U. [

8 k$ M) U  p# m' z3 u0 N下边是3.1.5版本board.c里自带的代码,文档中心里的代码应该也一样
4 x0 I8 T  ?$ z( Y7 W8 E2 X1 I: ?: C# J1 i$ E
static UART_HandleTypeDef UartHandle;) h, n$ j& c+ m; D9 j2 z6 {
static int uart_init(void)
5 w) a0 O: A- V' L7 y5 _{
4 D: s: i2 q: M' [6 F/* TODO: Please modify the UART port number according to your needs */
) A/ c, e. ]6 u2 P& I0 |& l5 {UartHandle.Instance = USART2;
/ a  f" ]- R; t3 Y( fUartHandle.Init.BaudRate = 115200;
; u& o1 ]0 u# `8 x/ KUartHandle.Init.WordLength = UART_WORDLENGTH_8B;" B& e* z* Y2 F% z% o* L
UartHandle.Init.StopBits = UART_STOPBITS_1;
. V0 @4 M* T# ]" s! }UartHandle.Init.Parity = UART_PARITY_NONE;
; Z9 n) p& `! t: r) T" U1 ]! aUartHandle.Init.Mode = UART_MODE_TX_RX;& ^* e/ r7 \" }$ w0 i
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;: W: l, D2 r1 S2 Z( h: X2 P
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
) y6 \8 _8 L$ L; z% X6 V/ q, aif (HAL_UART_Init(&UartHandle) != HAL_OK)" r8 M. {! K; J. l# y- D, T. M1 i
{
) k0 a. ^# ~' R. h% X0 k0 ^  bwhile (1);/ B9 i1 k; N. b4 i2 g& h0 V' P
}
+ n3 @' {5 G" g' s2 Freturn 0;2 h( R& I0 I$ j- \+ x
}" s6 L6 H+ k% z( \
INIT_BOARD_EXPORT(uart_init);
* I- n2 Z, d) M" }( ?& `void rt_hw_console_output(const char str)
* i8 ?: H9 K- l4 t4 x0 @{
2 m2 t0 G4 p$ L- }: l: c7 mrt_size_t i = 0, size = 0;# n, \  k( Q9 C* l  F
char a = '\r';
$ T5 x; K6 h8 E__HAL_UNLOCK(&UartHandle);" R2 z% u/ [1 m1 H1 u$ o
size = rt_strlen(str);
9 d' y. Z/ g# i# bfor (i = 0; i < size; i++)
8 N) ^# W# k  Y{" `0 t2 ^0 ?2 c- ^1 X# M9 s) {
if ((str + i) == '\n')
% I7 I! g; {3 |% L+ W5 Z2 u  W{
# q+ ~" E2 L! U  IHAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);
+ B% A* R8 x6 g- R2 v}1 E: M, K" `$ a9 b; ~
HAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
- m- ~% l. _& n6 u" V}* O' n3 M. y2 h2 ~! ~3 Q
}$ v7 n6 N4 m2 V: E
& c2 M8 L8 |/ A. D7 J/ J
直接kprintf之后串口完全没有反应
' L* H+ W( k. U$ v
/ b$ l8 |" c$ Z已经排除了硬件故障的可能,直接调用hal库的串口可以正常使用
/ K8 `& G+ [/ {' l, p+ s4 f进debug调试后发现kprintf时候完全在上面
, b; O: Z+ ~. I$ }% O: V  j6 m9 D! P) U" Z) N9 F# Y! ~
rt_hw_console_output()里走了一遭,但串口一点反应都没给,推测问题是根本没关联到串口上,但怎么解决一直没找到
" z5 g/ P- @+ g) d$ K" g- _, K8 m  h1 k

该用户从未签到

5#
发表于 2022-10-18 15:00 | 只看该作者
得改链接脚本否则不能正常自动初始化,cubeMX那边生成的代码没有问题可以直接用,就像GCC编译下finsh线程似乎没有正常的被初始化里面一样,只能说在gcc编译链下搞RT-Thread坑有点多
7 ]( o) F1 d5 z+ c

该用户从未签到

4#
发表于 2022-10-18 14:52 | 只看该作者
这个函数本来就是让你修改的,但是你没修改,直觉认为 cubemx 生成的代码和 rtt 无缝衔接了
. d( R/ x" L9 F8 m% m" i正常操作流程应该是把 cubemx 生成的代码赋值粘贴到 rtt 原来对应的地方。
8 z5 {; @* w; O7 T3 a

该用户从未签到

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

该用户从未签到

2#
发表于 2022-10-18 14:30 | 只看该作者
串口初始化失败了呗。自己检查一下引脚复用配置。外设电源时钟配置等等。
8 |3 m' X) v# ^3 E4 A& |2 s! J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 00:25 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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