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模块之间传输数据只需要两根线。