【PIC32MZ】Usart串口通讯

发布者:czm721002最新更新时间:2020-03-15 来源: eefocus关键字:PIC32MZ  Usart  串口通讯 手机看文章 扫描二维码
随时随地手机看文章

串口通讯是一个很成熟的通讯协议,几乎所有MCU都配有串口,本篇将述在Harmony中如何使用Usart,使用设备为PIC32MZ2048EFH,其他PIC32MZ基本相似。


以下使用的是Harmony的动态驱动,要注意动态驱动的使用规则,动态驱动排序为Driver中配置顺序,即InstanceIndex,而非Usart ID的顺序。

 

串口使用流程如下,以串口2为例:

 

1、配置串口驱动

2、配置串口引脚

3、生成代码,使用串口

注意Dynamic的驱动对象都需要有一个Open动作来创建一个Handle,后续所有操作都是用Handle来代表这个驱动对象。所有动态驱动的中断都是采用注册回调函数的方式来使用,无需到system_init中添加,也无需自己清除中断标识,驱动已经自己完成了。


另外要注意的一点是,串口接收一个字节后进入了中断,如果不使用Read接收一下,那么后续就再也无法进入中断,就会出现仅中断一次的现象,因此,也不要在中断中进行耗时操作,避免没有及时接收数据,导致数据残缺不全。


包含头文件之后,第一步要initial(open一个客户端),然后就是调用读写函数,注意读的时候在中断中做简单处理,在APP_Tasks()中循环调用Uart_Task(),以处理接收到的数据。uart_printf支持与printf一样的功能,可打印数字。


uart.h

#ifndef _UART_H

#define _UART_H

 

#define uartMaxBufferSize 50

 

 

#include

#include

#include

#include

#include "system_config.h"

#include "system_definitions.h"

#include

#include

 

typedef enum

{

    Uart_Init,

    Uart_Receive

}UART_STATE;

 

typedef struct

{

    /*** uart ******/

    DRV_HANDLE drvUartHandle;

    UART_STATE uartState;

    

    uint8_t uartBuffer[uartMaxBufferSize];

    uint8_t uart_BufferSize;

    

    bool uart_ByteReady;  // one command block receive ready flag

 

}UART_DATA;

 

UART_DATA uartData;

 

bool Uart_Initial();

 

void Uart_Task(void);

 

void Uart_WriteByte(uint8_t c);

 

void Uart_WriteString(uint8_t *string);

 

void Uart_printf(const uint8_t *fmt,...);

 

void Uart_interrupt(const SYS_MODULE_INDEX index);

 

#endif


uart.c

#include "uart.h"

 

uint8_t uartCount;     

uint8_t uartTmp;

 

 

/**************** uart ***************************/

void Uart_interrupt(const SYS_MODULE_INDEX index)

{

    //Uart_WriteByte(UartCommandComeReady);

    

    //if(DRV_USART_ReceiverBufferIsEmpty(uartData.drvUartHandle)) return;

 

    uartTmp = DRV_USART_ReadByte(uartData.drvUartHandle);

    

    if(uartData.uart_ByteReady)

        return;

    

    uartData.uartBuffer[uartCount] = uartTmp;

    uartCount ++;

 

    

}

 

bool Uart_Initial()

{

    uartData.uart_ByteReady = false;

    uartData.uart_BufferSize = 0;

    uartData.uartState = Uart_Init;

    

    /*********** UART *******************/

   uartData.drvUartHandle = DRV_USART_Open( DRV_USART_INDEX_0,DRV_IO_INTENT_EXCLUSIVE );  

    /* Check the USART1 driver handler */  

   if (uartData.drvUartHandle == DRV_HANDLE_INVALID )  

   {   

       return false;  

   }  

   DRV_USART_ByteReceiveCallbackSet(DRV_USART_INDEX_0, (DRV_USART_BYTE_EVENT_HANDLER)Uart_interrupt);  

   return true;

}

 

void Uart_Task(void)

{

    switch(uartData.uartState)

    {

        case Uart_Init:

            //Uart_Initial();

            uartData.uartState = Uart_Receive;

        break;

        

        case Uart_Receive:

            if(!uartData.uart_ByteReady) return;

            

            uartData.uart_ByteReady = false;

     

        break;

        

        default:

        break;

    }

}

 

void Uart_WriteByte(uint8_t c)

{

    while ((DRV_USART_TRANSFER_STATUS_TRANSMIT_FULL & DRV_USART_TransferStatus(uartData.drvUartHandle)) ) ;

        DRV_USART_WriteByte(uartData.drvUartHandle,c);

}

 

void Uart_WriteString(uint8_t *string)

{

    while(*string!='')

    {  

        if(*string=='n')

        {

            Uart_WriteByte(0x0D);

            Uart_WriteByte(0x0A);

        }

        else

            Uart_WriteByte(*string);  

        string++;  

    }  

}

 

void Uart_printf(const uint8_t *fmt,...)

{

    va_list ap;  

    char string[1024];  

      

    va_start(ap,fmt);  

    vsprintf(string,fmt,ap);

    Uart_WriteString(string);  

    va_end(ap); 

}

关键字:PIC32MZ  Usart  串口通讯 引用地址:【PIC32MZ】Usart串口通讯

上一篇:PIC16模拟串口以及采样正弦波
下一篇:PIC32MX450 串口4中断

推荐阅读最新更新时间:2024-11-11 21:42

STM32库函数实现USART发送数据
参考文件:STM32固件库使用手册的中文翻译版.pdf 如图1 我们先把USART初始化函数添加到主函数,如图二 包括Baudrate,Word Length,Stop Bit,Parity,Hardware Flow Control(硬件流控制),Usart Mode; UE使能,使能串口外设,如图3 3.串口初始化,串口外设使能之后,就要发送数据了如图4; 4.发送完成标志位函数,如图5; 程序1 实现功能代码如下 /************************************************ 刘凯教你学STM32F103 第20讲 软件仿真,库函数实现USART数据发送 2
[单片机]
STM32之旅4——USART
串口也是用的比较多的,在STM32CubeMX中生成代码后,需要添加一些代码才可以用。 drv_usart.h: #ifndef __DRV_USART_H #define __DRV_USART_H #define USART1_MAX_LEN 64 //接收区长度 #define USART1_BUFF_CACHE_LEN 1 //接收缓冲区长度 extern uint16_t g_usart1_sta; //接收状态 ,最高位为接收完成标志 extern uint8_t g_usart1_buff ; //接收buff extern uint8_t g_usart1_buff_cache ; //接
[单片机]
串口通讯在CCD相机系统中的应用
1引言 CCD相机系统在运行过程中,有许多来自工作现场的数据需要实时采集,处理和记录。以便上级管理系统及时掌握相机的工作状态。并且上级管理系统需要实时调整相机参数,并发出相应的指令,使得相机采集到的图像像质更好。 MCS-51单片机内部含有一个可编程全双工串行通信接口,该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。MCS-51单片机串行口的结构由串行口控制寄存器、发送和接收电路等三部分组成。 串行通信是一种能把二进制数据按位传送的通信,故它所需传输线条数极少,特别适用于分级、分层和分布式控制系统以及远程通信之中 。根据实际使用的需要,CCD相机系统与上级管理系统之间的通讯由单片机串口来完成。本文对
[嵌入式]
STM32F1笔记(三)UART/USART
UART:Universal Asynchronous Receiver/Transmitter(通用异步收/发器) USART:Universal Synchronous/Asynchronous Receiver/Transmitter(通用同步/异步串行收/发器) 从命名即可看出USART就是UART的基础上添加了同步功能。通常把UART/USART称为串口。 串口包含TLL电平和232的串口,485等电气特性的串口。232、485通常应用于工业。 串口配置的一般步骤可以参考正点原子的总结: 1、串口时钟使能,GPIO时钟使能; 2、串口复位;(我不知道这一步的意义,去掉似乎也没影响,求大神指点)
[单片机]
STM32F1笔记(三)UART/<font color='red'>USART</font>
STM32中USART的使用方法
USART作为一种标准接口在应用中十分常见。本文着重分析其作为UART的配置和应用方法。 1、STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定。首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟;最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟。 其次是配置GPIO,GPIO的各种属性由硬件手册的AFIO一章详细规定,较为简单。 接着相关设备需要如果需要使用中断功能,必须先配置中断优先级,后文详述。 然后是配置外围设备的相关属性,视具体设备而定,如果设备需要使用中断方式,必须使能相应设备的中断,之后需要使能相关设备。 最后如
[单片机]
ATmega162不同外部晶振之间的串口通讯
我现在一个单片机ATmega162晶振11.052900MHZ,另一个是ATmega162晶振1.843200MHZ。通讯波特率选择9600。128个字节的通讯,不存在数据丢失情况。但是,在通讯过程中,希望不要存在其他终端进行终端它们,比如:定时器中断。 三个AVR单片机通讯,1个ATmega162晶振11.059200MHZ和2个ATmega162晶振1.843200MHZ。一个1.843200MHZ给11.059200MHZ发送128个字节数据,之后11.059200MHZ又发送给另一个1.843200MHZ,128个字节的数据通讯可以完成。
[单片机]
大联大品佳推出PIC32MZ系列VR解决方案
2017年1月12日,半导体元器件分销商---大联大控股宣布,其旗下品佳推出基于美国微芯科技公司(Microchip)的PIC32MZ系列MCU的VR应用解决方案。 Microchip PIC32MZ 32位MCU具有一流的性能,ADC吞吐率为28 Msps,代码密度优化30%,并且具有能现场升级的最高2MB双分区闪存和512KB RAM。该系列带有高速USB、10/100以太网和两个CAN 2.0b模块,以及多路UART、SPI/I²S™和I²C™通道,可支持各种高级连接功能。可选的片内加密引擎依靠随机数发生器、高吞吐率数据加 密/解密引擎和身份验证确保安全通信。 大联大品佳正是基于PIC32MZ嵌入式连接功能(EC)的32位M
[单片机]
大联大品佳推出<font color='red'>PIC32MZ</font>系列VR解决方案
STM32F103RCT6+USART3+UART5初始化代码
USART和UART的区别就是:USART支持同步收发,UART只支持异步收发 同步模式:USART 需要同步始终信号USART_CK,通常情况同步信号很少使用,因此一般的单片机UART和USART使用方式是一样的,都使用异步模式。 1 USART3初始化 void USART3_init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //使能USART3,GPIOB时钟 RCC
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved