NRF52832使用printf只能输出第一个字符的问题

NRF52832的函数库比较“纷繁复杂”,出现这种情况,最有可能的原因是函数库配置不当。
NRF52832有两个与串口相关的函数库:app_uart.c与app_uart_fifo.c。其中,app_uart_fifo.c函数库支持printf函数在有缓冲区的情况时发送连续的字符,此时串口的通信是正常的。而如果使用了app_uart.c函数库,由于从个人目前的经验来说,这两个函数库的函数在调用的时候基本没有区别,编译器不会报错,但由于该函数库不支持建立一个FIFO缓冲区,所以只会发送第一个字符。
因此。如果遇见了printf函数只能发送一个字符的情况,而且即使把已有的正确例程的主函数原原本本的抄下来,编译器丝毫不报错,但仍然只能发送一个字符的情况,很大的可能是与串口有关的函数库使用的是app_uart.c而非app_uart_fifo.c。此时,将app_uart.c文件替换成app_uart_fifo.c文件即可解决问题。
(文章来自于作者经验,参考时请以自身具体情况为准。转载时请注明出处)

你好,关于在 NRF52832使用 printf,需要先将串口(UART)进行配置,具体步骤如下: 1. 初始化串口:设置波特率、数据位、停止位、校验位等参数,并使能 UART。 2. 将 printf 函数重定向到串口:在使用 printf 函数前,需要调用重定向函数,将输出流指向串口。 下面是一个简单的例子,以 nRF5 SDK 17.0.2 为例: ```c #include "nrf_uart.h" #include "nrf_gpio.h" #include "nrf_delay.h" #include "stdio.h" #define UART_TX_PIN 8 #define UART_RX_PIN 6 #define UART_BAUDRATE 9600 void uart_init(void) { nrf_uart_baudrate_t baudrate = NRF_UART_BAUDRATE_9600; nrf_uart_configure(UART0, NRF_UART_PARITY_EXCLUDED, NRF_UART_HWFC_DISABLED); nrf_uart_baudrate_set(UART0, baudrate); nrf_uart_txrx_pins_set(UART0, UART_TX_PIN, UART_RX_PIN); nrf_uart_enable(UART0); } int _write(int file, const char * p_char, int len) { for (int i = 0; i < len; i++) { nrf_uart_tx_buffer_flush(UART0); nrf_uart_tx_buffer_set(UART0, (uint8_t)p_char[i]); while (!nrf_uart_event_check(UART0, NRF_UART_EVENT_TXDRDY)); nrf_uart_event_clear(UART0, NRF_UART_EVENT_TXDRDY); } return len; } int main(void) { uart_init(); while (1) { printf("Hello, world!\r\n"); nrf_delay_ms(1000); } } ``` 在这个例子中,我们首先定义了 UART 的引脚和波特率,然后在 `uart_init` 函数中进行串口初始化。接着我们重定向了 printf 函数的输出流,让其输出到 UART0 中。最后在主函数中通过 printf 函数输出 "Hello, world!",并延时1秒。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值