/* printk putchar 函数 - 用于控制台输出 */
static int at32_uart_putchar(int c)
{
const struct device *dev = DEVICE_DT_GET(DT_NODELABEL(usart1));
if (!device_is_ready(dev)) {
return c;
}
/* 处理换行符:\n → \r\n */
if (c == '\n') {
uart_poll_out(dev, '\r');
}
uart_poll_out(dev, c);
return c;
}
static int at32_uart_init(const struct device *dev)
{
// ... UART 初始化代码 ...
/* 安装 printk 钩子 */
__printk_hook_install(at32_uart_putchar);
return 0;
}3. 配置说明 3.1 必须配置在 `prj.conf` 中添加以下配置:# 启用 printk 支持 CONFIG_PRINTK=y # 启用控制台输出 CONFIG_CONSOLE=y # 启用 UART 控制台 CONFIG_UART_CONSOLE=y # 启用串口驱动 CONFIG_SERIAL=y3.2 硬件连接
| 信号 | MCU 引脚 | 说明 |
| TX | PA9 | USART1 发送脚,连接到 DAPLink 的 RX |
#include <zephyr/sys/printk.h>
int main(void)
{
printk("AT32F423 Demo Start\n");
int value = 42;
printk("Value = %d\n", value);
printk("Hex: 0x%08x\n", value);
return 0;
} 4.2 支持的格式说明符| 格式符 | 说明 | 示例 |
| %d | 十进制整数 | printk("%d\n", 123); |
| %u | 无符号十进制 | printk("%u\n", 456); |
| %x | 十六进制(小写) | printk("%x\n", 255); |
| %X | 十六进制(大写) | printk("%X\n", 255); |
| %p | 指针 | printk("%p\n", ptr); |
| %c | 字符 | printk("%c\n", 'A'); |
| %s | 字符串 | printk("%s\n", "hello"); |
| %f | 浮点数 | printk("%f\n", 3.14); |
test_at32/ ├── CMakeLists.txt # 构建配置 ├── prj.conf # Kconfig 配置 ├── src/ │ └── drivers/ │ └── uart_at32.c # UART 驱动 + printk 钩子 ├── main.c # 应用代码 └── boards/ └── at32f423_start.dts # 设备树配置6. 常见问题
CONFIG_PRINTK=n
实现效果:
