(1)全双工异步通信
(2)单线半双工通信
(3)NRZ标准格式
(4)可编程的串口特性:
数据位:1位-8位
校验位:偶校验,奇校验
支持1,2个停止位
(5)可以区分数据和地址的位
(6)双缓冲接收和发送
(7)独立的发送器和接收器使能位
(8) I独立的中断使能位
(9)可通过基于中断或轮询算法的状态完成发送器和接收器操作
(10)可切换TXRX引脚
(11)16级发送/接收FIFO
(12)可编程的波特率发生器
(13)波特率自动检测
14)多处理器通信:
空闲线模式
地址位模式
15)状态标志位:
传输检测标志:发送寄存器为空,接收寄存器不为空
错误检测标志:溢出错误,中断检测,奇偶校验错误,帧错误三:串口的编写流程:3.1 首先串口时钟使能,GPIO时钟使能:
3.2 GPIO端口模式设置:
3.3 串口参数初始化:
3.4 开启中断并且初始化
3.5 使能串口:
3.6 编写串口发送函数。
四:软件代码:4.1 IO口的初始化:
GPIO_setMasterCore(DEVICE_GPIO_PIN_UARTRXDA, GPIO_CORE_CPU0); GPIO_setPinConfig(DEVICE_GPIO_CFG_UARTRXDA); GPIO_setDirectionMode(DEVICE_GPIO_PIN_UARTRXDA, GPIO_DIR_MODE_IN); GPIO_setDrivingCapability(DEVICE_GPIO_PIN_UARTRXDA,GPIO_DRIVE_LEVEL_VERY_HIGH); GPIO_setPadConfig(DEVICE_GPIO_PIN_UARTRXDA, GPIO_PIN_TYPE_PULLUP); GPIO_setQualificationMode(DEVICE_GPIO_PIN_UARTRXDA, GPIO_QUAL_ASYNC); // // GPIO29 is the UART Tx pin. // GPIO_setMasterCore(DEVICE_GPIO_PIN_UARTTXDA, GPIO_CORE_CPU0); GPIO_setPinConfig(DEVICE_GPIO_CFG_UARTTXDA); GPIO_setDirectionMode(DEVICE_GPIO_PIN_UARTTXDA, GPIO_DIR_MODE_OUT); GPIO_setDrivingCapability(DEVICE_GPIO_PIN_UARTTXDA,GPIO_DRIVE_LEVEL_VERY_HIGH); GPIO_setPadConfig(DEVICE_GPIO_PIN_UARTTXDA, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(DEVICE_GPIO_PIN_UARTTXDA, GPIO_QUAL_ASYNC);
4.2 串口的初始化:
Interrupt_initModule(); Interrupt_initVectorTable(); // // Map the ISR to the wake interrupt. // Interrupt_register(INT_UARTA_TX, INT_UARTA_TX_IRQHandler); Interrupt_register(INT_UARTA_RX, INT_UARTA_RX_IRQHandler); Interrupt_setPriorityGroup(INTERRUPT_PRIGROUP_PREEMPT_7_6_SUB_5_0); Interrupt_setPriority(INT_UARTA_TX,1,0); Interrupt_setPriority(INT_UARTA_RX,0,0); // // Initialize UARTA and its FIFO. // UART_performSoftwareReset(UARTA_BASE); // // Configure UARTA for echoback. // UART_setConfig(UARTA_BASE, DEVICE_LSPCLK_FREQ, 9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); UART_resetChannels(UARTA_BASE); UART_clearInterruptStatus(UARTA_BASE, UART_INT_TXRDY | UART_INT_RXRDY_BRKDT); UART_enableModule(UARTA_BASE); UART_performSoftwareReset(UARTA_BASE);
4.3 在主函数中添加 串口输出字符串
while(1)
{
DEVICE_DELAY_US(1000000);
msg = (uint8_t *)"Hello World! by:testor!\0";
UART_writeCharArray(UARTA_BASE, msg,strlen(msg));
GPIO_togglePin(23);
}
我要赚赏金
