您现在的位置: 主页 > MCU > 单片机技术应用 > PIC32MX单片机外设库使用(Ⅱ)-- UART篇 -
本文所属标签:
为本文创立个标签吧:

PIC32MX单片机外设库使用(Ⅱ)-- UART篇 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]4.4 串口应用 因为笔者硬件设计使用UART4口,然而在《PIC32 Peripheral Libraries for MPLAB C32 Compiler》库里却找不到使用UART4的库函数。历经百度百般搜索,终于获得了一点蛛丝马迹:原文如下
PIC32MX 5/6/7系列

4.4 串口应用 因为笔者硬件设计使用UART4口,然而在《PIC32 Peripheral Libraries for MPLAB C32 Compiler》库里却找不到使用UART4的库函数。历经百度百般搜索,终于获得了一点蛛丝马迹:原文如下
PIC32MX 5/6/7系列的C32用法,已經完全變了一個方式。
範例程式所用的是依新版的用法,也可以相容PIC32MX 3/4系列。
用法說明在
MPLAB C32docpic32-lib-help下的UART-PLIB-Help.chm
另外APP1632實驗版及說明書也有提及這部份,可以參考使用。感叹一句,神奇的万能的百度啊!结合例程,及笔者的实际硬件,做出如下调试实验目标:1.指示灯点亮,用于表示接收数据成功。2.用串口调试助手给单片机发送数据0x01, 0x02,0x03,0x04, 0x05;串口调试助手接收到同样的数据0x01, 0x02,0x03,0x04, 0x05。表示串口驱动调试成功。
#define pbclk 1000000#define desired_rate 4800/***********************************************************************************************函数名 字: UART4Config*功能描 述:串口1硬件驱动配置*输 入: 无*输 出: 无*返 回: 无*全局变量: 无*调用模块: 使用内部8M FRC作为时钟源+ 8分频 = 1 M 外设时钟 里的串口驱动部分**-------------------------------------------------------------------------**项 目 组: **创建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void UART4Config(void){ //配置和使能UART4, 关闭CTS, RTS数据流信号,只启用TX,RX UARTConfigure(UART4, UART_ENABLE_PINS_TX_RX_ONLY); //设置FIFO中断方式 //TX FIFO缓冲区未填充满时中断-- 缓冲区未填满。 //RX缓冲器非空时中断-- 缓冲区有数据。 UARTSetFifoMode(UART4, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY); //设置为数据位8,无校验位,1位停止位 UARTSetLineControl(UART4, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1); //设置波特率,后面两个参数分别是PBCLK和期望的波特率 UARTSetDataRate(UART4, pbclk, desired_rate); //使能UART模块,使能发送,使能接收 UARTEnable(UART4, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));// 配置UART4接收中断 INTEnable(INT_SOURCE_UART_RX(UART4), INT_ENABLED); INTSetVectorPriority(INT_VECTOR_UART(UART4), INT_PRIORITY_LEVEL_2); INTSetVectorSubPriority(INT_VECTOR_UART(UART4), INT_SUB_PRIORITY_LEVEL_0); // configure for multi-vectored mode INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR); // enable interrupts INTEnableInterrupts();}/***********************************************************************************************函数名 字: WriteString(const char *string)*功能描 述: UART4数据流发送函数*输 入: string -- 需要发送的字符串*输 出: 无*返 回: 无*全局变量: 无*调用模块:**-------------------------------------------------------------------------**项 目 组:**创建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void WriteString(const char *string){ while (*string != '\0') { while (!UARTTransmitterIsReady(UART4)) ; UARTSendDataByte(UART4, *string); string++; while (!UARTTransmissionHasCompleted(UART4)) ; }}/***********************************************************************************************函数名 字: PutCharacter(const char character)*功能描 述: UART4发送单字节字符函数*输 入: 无*输 出: 无*返 回: 无*全局变量: 无*调用模块:**-------------------------------------------------------------------------**项 目 组:**创建日期: **作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************/void PutCharacter(const char character){ while (!UARTTransmitterIsReady(UART4)) ; UARTSendDataByte(UART4, character); while (!UARTTransmissionHasCompleted(UART4)) ;}/***********************************************************************************************函数名 字: __ISR(4, ipl2) _Timer1Handler(void)*功能描 述:UART1发送中断函数*输 入: 无*输 出: 无*返 回: 无*全局变量: 无*调用模块: 无**-------------------------------------------------------------------------**项 目 组:**创建日期:**作 者: ****版 本: ******-------------------------------------------------------------------------**修 改 者:**修 改 日 期:**版 本:**版 本 描 述:*************************************************************************************************//* Timer 1 ISR *//* Specify Interrupt Priority Level = 2, Vector 49 */void __ISR(49, ipl2) _UART1_TX_handle(void){unsigned char Receivedata;// Is this an RX interrupt?if (INTGetFlag(INT_SOURCE_UART_RX(UART4))){// 发送接受到的数据,用于验证通信是否正确PutCharacter(UARTGetDataByte(UART4));// 清除接收中断标志INTClearFlag(INT_SOURCE_UART_RX(UART4));// 点亮接收数据指示灯,用以表示接收数据成功OPEN_LED_D4();}//我们不关心发送中断 if ( INTGetFlag(INT_SOURCE_UART_TX(UART4)) ) { INTClearFlag(INT_SOURCE_UART_TX(UART4)); }}

本文引用地址: http://www.21ic.com/app/mcu/201808/786484.htm



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > PIC32MX单片机外设库使用(Ⅱ)-- UART篇 -
 

"PIC32MX单片机外设库使用(Ⅱ)-- UART篇 -"的相关文章

网站地图

围观()