全站数据
8 4 2 0 5 8 1

uart模块使用

经济关注零点守候 | 教育先行,筑梦人生!         
问题更新日期:2024-06-10 16:01:37

问题描述

uart模块使用希望能解答下
精选答案
最佳答案

UART使用示例

1. UART发送与接收(非中断方式)

#include 'headfile.h' //包含头文件

uint8 uart_receive;

uint8 uart_send[10];

int main(void)

{

DisableGlobalIRQ();

board_init();//务必保留,本函数用于初始化MPU 时钟 调试串口

//初始化串口 波特率为115200 TX为D16 RX为D17

uart_init (USART_8, 115200,UART8_TX_D16,UART8_RX_D17);

//总中断最后开启

EnableGlobalIRQ(0);

uart_send[0] = 'S';

uart_send = 'E';

uart_send = 'E';

uart_send = 'K';

uart_send = 'F';

uart_send = 'R';

uart_send = 'E';

uart_send[7] = 'E';

uart_send[8] = '

';

uart_send[9] = '

r';

while(1)

{

//串口字节发送

uart_putchar(USART_8,'S'); //发送0xA5

uart_putbuff(USART_8,uart_send,10); //发送uart_send

uart_putstr(USART_8,'输入任意字符程序继续运行

r');//发送字符串

uart_getchar(USART_8,&uart_receive);//等待接收到一个字节后程序继续运行

uart_putchar(USART_8,uart_receive); //发送收到的字符

uart_putstr(USART_8,'

r'); //发送换行

systick_delay_ms(100);//延时100毫秒

}

}

编程要点1:在使用uart_getchar函数获取串口数据时需要注意,此函数需要等到收到数据后才会继续往后运行。

2. UART接收(中断方式)

#include 'headfile.h'

uint8 example_rx_buffer;

lpuart_transfer_t example_receivexfer;

lpuart_handle_t example_g_lpuartHandle;

uint8 uart_data;//接收到的串口数据

void example_uart_callback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData)

{

if(kStatus_LPUART_RxIdle == status)

{

//数据已经被写入到了 之前设置的BUFF中

//本例程使用的BUFF为 example_rx_buffer

uart_data = example_rx_buffer;//将数据取出

}

handle->rxDataSize = example_receivexfer.dataSize;//还原缓冲区长度

handle->rxData = example_receivexfer.data;//还原缓冲区地址

}

//实验现象说明:将RX TX短接

//通过在线调试可以看到 uart_data数据在持续加一操作

uint8 uart_send;

int main(void)

{

DisableGlobalIRQ();

board_init(); //务必保留,本函数用于初始化MPU 时钟 调试串口

//初始化串口 波特率为115200 TX为D16 RX为D17

uart_init (USART_8, 115200,UART8_TX_D16,UART8_RX_D17);

NVIC_SetPriority(LPUART8_IRQn,15);//设置串口中断优先级 范围0-15 越小优先级越高

uart_rx_irq(USART_8,1);

example_receivexfer.dataSize = 1;//配置串口接收缓冲区长度

example_receivexfer.data = &example_rx_buffer; //配置串口接收的缓冲区

//设置中断函数及其参数

uart_set_handle(USART_8, &example_g_lpuartHandle, example_uart_callback, NULL, 0, example_receivexfer.data, 1);

EnableGlobalIRQ(0);

while(1)

{

uart_send++;

//串口字节发送

uart_putchar(USART_8,uart_send);

//更多功能函数 自行查阅zf_uart文件

systick_delay_ms(100);

}

}

编程要点1:在使用串口接收中断时需要注意,串口中断并不是一个固定的名称了,而是使用一个函数去设置当中断后我们想要执行的函数。这是因为在SDK的底层已经定义了串口中断,并且在串口中断里面做了一些处理,内部的程序会根据我们在初始化串口中断函数时设置的参数,在合适的时候调用我们用户自己设置的中断回调函数。

编程要点2:在使用串口接收中断后,我们想要接收到一个字节就进入中断,但是又想要接收数组或者字符串应该怎么办呢?完成这个功能并不难,我们只需要定义一个数组,将每次收到的字节依次存放在数组里面就可以实现。

其他回答

uart模块将要传输的资料在串行通信与并行通信之间加以转换。

作为把并行输入信号转成串行输出信号的芯片,uart模块通常被集成于其他通讯接口的连结上。

uart模块不是像SPI和I2C这样的通信协议,而是微控制器中独立的物理电路或独立的IC。

uart模块最好的一点是它只使用两根线就可以在设备之间传输数据,uart模块背后的原理很容易理解。

在uart模块中,两个uart模块直接相互通信。

发送uart模块将来自CPU等控制设备的并行数据转换为串行形式,并将其串行发送到接收uart模块,接收uart模块然后将串行数据转换回接收设备的并行数据。

在两个uart模块之间传输数据只需要两根线。