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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
版本:RT-Thread nano 3.1.5 用CubeMX生成代码0 ^9 r$ J, J- @0 J
环境:Clion搭配gcc工具链(可视作CubeIDE)
, I" J- y- b4 b问题:rt_kprintf()貌似没有关联到串口  R" D7 w9 n0 H/ f' n1 f+ P
8 k& u: j+ B. B9 ]9 w' n* z3 k
下边是3.1.5版本board.c里自带的代码,文档中心里的代码应该也一样- R* J8 f: C6 e; a$ a6 g; K0 v
1 r7 A% K9 k" h1 A+ }# \- H0 {; E
static UART_HandleTypeDef UartHandle;
: ?% C/ n4 Y2 Hstatic int uart_init(void)7 N8 h$ t* `3 e6 w( r
{+ O- s" E6 V# i* m& K4 s
/* TODO: Please modify the UART port number according to your needs */
' o7 w& ?- n( Q' }  sUartHandle.Instance = USART2;3 `  |. }: f: x3 M5 N8 B  F- d
UartHandle.Init.BaudRate = 115200;1 b) J& n. x; L% R- `2 I
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
* B8 y" U3 o8 A6 c% i' RUartHandle.Init.StopBits = UART_STOPBITS_1;
# x& ~# d: S1 m- I; A6 P7 kUartHandle.Init.Parity = UART_PARITY_NONE;  f# Y8 G0 u7 i+ _/ U5 P
UartHandle.Init.Mode = UART_MODE_TX_RX;9 g* T1 c: [+ {
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
7 r& q$ k( `: B: P) I+ t+ nUartHandle.Init.OverSampling = UART_OVERSAMPLING_16;' \- _; G" m7 J# M7 q
if (HAL_UART_Init(&UartHandle) != HAL_OK)
) V9 c9 R$ L6 i) \( p( v% P, \{% R6 P" L7 i* f- h
while (1);
: m5 W+ b7 c& O+ S- o1 {}9 B: M( G6 z5 V: S3 `  G
return 0;4 D: j2 w! L6 ~8 k
}2 o( U! z8 `8 N# v' g. n4 o
INIT_BOARD_EXPORT(uart_init);
+ y  J! C6 x. W" L, [+ t9 S4 J# Avoid rt_hw_console_output(const char str)8 \9 F  I9 U) l
{; t1 ~! V5 G+ D& S
rt_size_t i = 0, size = 0;
8 c, m) U4 Y* u) echar a = '\r';
4 o: q! X8 ]2 N% X__HAL_UNLOCK(&UartHandle);- J; [: l) ?8 L& m
size = rt_strlen(str);/ c. B, ^/ X. i! ]0 F- n1 W, N
for (i = 0; i < size; i++)0 q! f: p5 g- d( [3 B) b
{
2 D! y8 z! H: k6 k8 _" }if ((str + i) == '\n')
6 }. L& t" \: g: \{
. \1 \8 S; W2 k2 G' a5 |HAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);
! ^: b/ c% q0 ]5 Y! W}8 F: V7 D" t; D4 H. k+ p
HAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
" P  ~2 }, Y: M( u4 @( D; a; w: R}
/ j9 H$ W. y* i2 {% h}
. _4 h% H+ V2 C  E: U% V
4 L$ R7 ^& U6 g9 J* x6 ^9 H直接kprintf之后串口完全没有反应$ o4 \  p4 D% q
- A; f& i) F& `4 V
已经排除了硬件故障的可能,直接调用hal库的串口可以正常使用
4 Z2 M" O' \( F进debug调试后发现kprintf时候完全在上面
/ O0 u$ f" T: r7 m  }' f
( i1 t7 W. W+ ^rt_hw_console_output()里走了一遭,但串口一点反应都没给,推测问题是根本没关联到串口上,但怎么解决一直没找到1 \" f& q, ?0 `  T

该用户从未签到

2#
发表于 2022-10-18 14:30 | 只看该作者
串口初始化失败了呗。自己检查一下引脚复用配置。外设电源时钟配置等等。
- a( Y* A7 @8 }! f

该用户从未签到

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

该用户从未签到

4#
发表于 2022-10-18 14:52 | 只看该作者
这个函数本来就是让你修改的,但是你没修改,直觉认为 cubemx 生成的代码和 rtt 无缝衔接了, ^6 J5 m2 [( Z
正常操作流程应该是把 cubemx 生成的代码赋值粘贴到 rtt 原来对应的地方。
8 [/ V' v) k$ |3 b8 s* D

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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