首页| 行业标准| 论文文档| 电子资料| 图纸模型
购买积分 购买会员 激活码充值

您现在的位置是:团子下载站 > 其他 > MM32F013x——UART 9bit 通信

MM32F013x——UART 9bit 通信

  • 资源大小:168.96KB
  • 上传时间:2021-08-21
  • 下载次数:0次
  • 浏览次数:40次
  • 资源积分:1积分
  • 标      签: 灵动微电子 uart

资 源 简 介

在之前的微课堂中和大家分享过灵动MM32系列MCU的UART通信实例,在此实例的基础上我们增加UART9bit通信功能。UART9bit通信的作用是第9bit用于标识是地址或数据,第9bit为1标识是从机地址,为0标识是数据,此外UART通信的第9bit也可作为数据的同步帧位使用。在双机通讯中,UART的8bit通信的第九位一般是奇偶校验位,而多机通讯中,第九位用于标识地址或数据,常用1表示后面的是从机地址,0表示后面的是数据。我们通常希望只有被寻址的接收者才被激活,来接收随后的数据,这样就可以减少由未被寻址的接收器的参与带来的多余的UART服务开销。未被寻址的设备可启用其静默功能置于静默模式。在静默模式里,任何接收状态位都不会被设置,所有接收中断被禁止。以MM32F013x系列MCU的UART通信为例,通过一个示例Demo介绍UART9bit通信的同步帧方式。一、与UART9bit通信相关的寄存器图1如上图1所示为UART通用控制寄存器UART_CCR,在MM32F013xUM手册的第489和第490页有关于该寄存器位的详细描述。本实例用到的UART通用控制寄存器UART_CCR位说明如下:Bit11B8EN(rw,reset:0x00)UART同步帧发送第9bit使能控制位。该位使能后校验使能PEN不起作用。1:使能同步帧第9bit发送。库函数设置:UART_Enable9bit(UART1,ENABLE)0:禁止同步帧第9bit发送。库函数设置:UART_Enable9bit(UART1,DISABLE)Bit10B8TOG(rw,reset:0x00)UART同步帧发送第9bit自动翻转控制位。1:使能第9bit自动翻转。库函数设置:UART_Set9bitAutomaTIcToggle(UART1,ENABLE)0:禁止第9bit自动翻转。库函数设置:UART_Set9bitAutomaTIcToggle(UART1,DISABLE)注:在B8TXD和B8POL的值相同时,在配置完寄存器后传输的第二个数据开始翻转,第一个数据默认为地址位。Bit8B8TXD(rw,reset:0x00)UART同步帧发送数据第9bit。1:发送同步帧第9bit为高电平。库函数设置:UART_Set9bitLevel(UART1,ENABLE)0:发送同步帧第9bit为低电平。库函数设置:UART_Set9bitLevel(UART1,DISABLE)二、程序配置初始化MM32F013xUART19bit通信从官网下载MM32F013x例程,以MM32F0133C7P的UART1通信为例,增加与UART9bit通信相关的寄存器位的初始化,这里以库函数方式给出,增加的3行代码如下所示://SynchronousframeenablebitUART_CCRBit11:B8ENUART_Enable9bit(UART1,ENABLE);//SynchronousframetransmitUART_CCRBit8:B8TXDUART_Set9bitLevel(UART1,DISABLE);//SynchronousframeautotoggleUART_CCRBit10:B8TOGUART_Set9bitAutomaTIcToggle(UART1,ENABLE);MM32F0133C7PUART19bit通信,初始化代码如下所示:voidbsp_UART1_9Bit_Init(u32baudrate){GPIO_InitTypeDefGPIO_InitStructure;UART_InitTypeDefUART_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1,ENABLE);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);GPIO_StrucTInit(&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStructure);UART_StructInit(&UART_InitStructure);UART_InitStructure.BaudRate=baudrate;UART_InitStructure.WordLength=UART_WordLength_8b;UART_InitStructure.StopBits=UART_StopBits_1;UART_InitStructure.Parity=UART_Parity_No;UART_InitStructure.HWFlowControl=UART_HWFlowControl_None;UART_InitStructure.Mode=UART_Mode_Rx|UART_Mode_Tx;UART_Init(UART1,&UART_InitStructure);UART_ITConfig(UART1,UART_IT_RXIEN,ENABLE);UART_Enable9bit(UART1,ENABLE);UART_Set9bitLevel(UART1,DISABLE);UART_Set9bitAutomaticToggle(UART1,ENABLE);NVIC_InitStructure.NVIC_IRQChannel=UART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority=3;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);UART_Cmd(UART1,ENABLE);}1●编写MM32F013xUART1中断函数MM32F013xUART1中断服务函数,同时将收到的数据发送出去,代码如下所示:voidUART1_IRQHandler(void){u8res;if(UART_GetITStatus(UART1,UART_IT_RXIEN)!=RESET){//Receivinginterrupts(datareceivedmustendat0x0D0x0a)UART_ClearITPendingBit(UART1,UART_IT_RXIEN);//readreceivedata.res=UART_ReceiveData(UART1);bsp_UART1_Send_Byte(res);}}2●编写MM32F013xUART1发送函数使用之前工程的MM32F0133C7PUART1发送函数,代码如下所示:voidbsp_UART1_Send_Byte(u8dat){UART_SendData(UART1,dat);while(!UART_GetFlagStatus(UART1,UART_FLAG_TXEPT));}MM32F013xUART19bit通信功能演示在main函数中调用SysTick和UART19bit通信初始化函数,代码如下所示:s32main(void){//SysTickinitDELAY_Init();//UART19bitinitbsp_UART1_9Bit_Init(115200);while(1){bsp_UART1_Send_Byte(0x55);DELAY_Ms(500);}}编译工程代码,然后烧录软件到MM32F0133C7P核心板上,用逻辑分析仪抓取UART19bit通信发送数据和接收数据的波形:演示发送数据:以MM32F0133C7P发送0x55为例,使用逻辑分析仪抓取UART19bit通信发送数据的波形如下图所示。图2演示接收数据:以上位机串口助手发送0xAA为例,使用逻辑分析仪抓取UART19bit通信收到的数据的波形,观察箭头所指第bit9位,如下图3所示:图3转自:灵动MM32MCU
VIP VIP