0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在MM32F013x上实现UART单线半双工的功能应用

电子设计 来源:电子设计 作者:电子设计 2022-02-21 10:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文将介绍在MM32F013x上实现UART单线半双工的功能应用。

UART单线半双工简介

在使用数字舵机通讯时所用到的通信方式为UART通信,但舵机只有三根接线,除去VCC和GND,只有一条通信线,也就是说要实现双向通信,只能使用单线半双工模式。在单线半双工模式下,TX 和 RX 引脚在芯片内部互连。

01 配置流程

单线半双工模式是通过设置UART_SCR寄存器的HDSEL位,在这个模式里UART_SCR 寄存器的SCEN位必须保持清零状态。

在单线半双工模式下,TX和RX引脚在芯片内部互联,使用控制位”HALF DUPLEX SEL”(UART_SCR 中的 HDSEL 位) 选择半双工和全双工通信。

注意

当选择单线半双工模式时RX 不再被使用,当有数据需要发送的时候IO才会被UART驱动,没有数据传输时TX总是被释放,所以使用单线半双工需要外部加上拉。

除此之外通讯上和正常的UART模式类似。由于是单线半双工同一时刻总线上只能有一个节点发送,所以需要软件协议层去管理线上冲突防止多个设备同时发送,当 TXEN 位被设置时,只要数据一写到数据寄存器上,发送就继续。

02 UART_SCR寄存器描述

配置UART_SCR 的HDSEL为1

UART_SCR 寄存器的SCEN位清零

初始化UART1

从官网上下载MM32F013x例程,里面有UART普通模式的配置,在这个基础上我们直接调用UART_HalfDuplexCmd(UART1,ENABLE);函数接口将串口配置成单线半双工模式,然后IO口初始化只需要配置PA9 TX即可,如下:

void UART1_NVIC_Init(u32 baudrate

{

UART_InitTypeDef UART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

//UART1 NVIC

NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

//Baud rate

UART_StructInit(&UART_InitStructure);

UART_InitStructure.BaudRate = baudrate;

//The word length is in 8-bit data format.

UART_InitStructure.WordLength = UART_WordLength_8b;

UART_InitStructure.StopBits = UART_StopBits_1;

//No even check bit.

UART_InitStructure.Parity = UART_Parity_No;

//No hardware data flow control.

UART_InitStructure.HWFlowControl = UART_HWFlowControl_None;

UART_InitStructure.Mode = UART_Mode_Rx | UART_Mode_Tx;

UART_Init(UART1, &UART_InitStructure);

UART_HalfDuplexCmd(UART1,ENABLE); //Half Duplex Enable

UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);

UART_Cmd(UART1, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);

//UART1_TX GPIOA.9

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);

}

功能验证测试

UART单线半双工功能测试我们现在拿两个MM32F0133的板子一个做主机一个做从机进行单线收发测试,主机先发送一包数据给从节点,当从节点收到这包数据后再把这包数据发回给主机,然后主机和从机两个板子PA9短接到一起,外部在加一个4.7K上拉电阻

主机函数处理:

uint8_t txbuff[10]= {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};

s32 main(void)

{

CONSOLE_Init(115200);//UART2 printf打印

UART1_NVIC_Init(115200);

printf(“UART Half Duplex TX Test /r/n”);

UART1_Send_Group(txbuff,sizeof(txbuff));

printf(“TX Data: ”);

for(index=0;index

主机UART的中断服务函数里面,将接从机发送的数据存放在Rx_buff里面,当收到一包数据后通过printf打印到串口,和原始发送的数据进行对比。

void UART1_IRQHandler(void)

{

u8 recvbyte;

// Send packet

if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)

{

UART_ClearITPendingBit(UART1, UART_IT_TXIEN);

}

// Recv packet

if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)

{

UART_ClearITPendingBit(UART1, UART_ISR_RX);

recvbyte = UART_ReceiveData(UART1);

Rx_buff[rx_cnt] = recvbyte;

rx_cnt++;

if(rx_cnt == 10)

{

gUartRxSta = 1;

rx_cnt = 0;

}

}

}

从机函数处理:

s32 main(void)

{

CONSOLE_Init(115200);//UART2 printf打印

UART1_NVIC_Init(115200);

printf(“UART Half Duplex RX Test/r/n”);

while(1)

{

if(gUartRxSta == 1)//收到一包数据

{

gUartRxSta = 0;

UART1_Send_Group(Rx_buff,10);

memset(Rx_buff,0x00,10);

}

}

//return 0;

}

从机UART的中断服务函数里面,将接主机发送的数据存放在Rx_buff里面,当收到一包数据后通过单线半双工这个串口发送回去。

void UART1_IRQHandler(void)

{

u8 recvbyte;

// Send packet

if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)

{

UART_ClearITPendingBit(UART1, UART_IT_TXIEN);

}

// Recv packet

if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)

{

UART_ClearITPendingBit(UART1, UART_ISR_RX);

recvbyte = UART_ReceiveData(UART1);

Rx_buff[rx_cnt] = recvbyte;

rx_cnt++;

if(rx_cnt == 10)

{

gUartRxSta = 1;

rx_cnt = 0;

}

}

}

观察测试结果:

然后我们通过主机UART2 的printf打印可以看到主机TX Data 和从机返回的RX Data数据是一样的。

再看看下图逻辑分析仪抓取的逻辑波形,可以也可以看到主机发送的波形和从机返回的波形数据是一样的。

转自:灵动微电子

审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • uart
    +关注

    关注

    22

    文章

    1304

    浏览量

    106125
  • 灵动微电子
    +关注

    关注

    7

    文章

    135

    浏览量

    20424
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    双工对讲系统对比半双工优势在哪?

    双工对讲系统让沟通无延迟、免按键,显著提升团队效率。深入解析DSP引擎、AEC回声消除、1.9GHz DECT频段与网状网络等核心技术,展示其电影拍摄、工业安全、活动管理及无人机操作中的应用。选择高性能无线全双工对讲系统,体
    的头像 发表于 12-08 15:18 116次阅读
    全<b class='flag-5'>双工</b>对讲系统对比<b class='flag-5'>半双工</b>优势在哪?

    CW32L010的串口输出

    异步全双工、同步半双工单线半双工模式,以及多机通信。 二、串口配置与初始化 使用CW32L010的串口输出
    发表于 11-27 07:27

    CW32L010的串口输出功能

    今天和大家分享一下CW32L010的串口输出功能: CW32L010 内部集成2个通用异步收发器(UART),支持异步全双工、同步半双工单线
    发表于 11-26 06:04

    白嫖的CW32小车的蓝牙模式使用教程

    这款CW32L012C8T6作为主控芯片的小车,通过串口和蓝牙连接,这款芯片内部集成3个通用异步收发器(UART),支持异步全双工、同步半双工单线
    发表于 11-21 15:38

    双工跳线和双芯跳线的区别是什么

    双工跳线和双芯跳线定义、传输模式、结构设计和应用场景存在明显区别: 定义与核心功能双工跳线:基于通信模式分类,强调数据传输的双向性。
    的头像 发表于 09-01 10:23 590次阅读

    Texas Instruments THVD1454半双工RS-485收发器数据手册

    Texas Instrument THVD1454半双工RS-485收发器是一款适用于工业应用的灵活半双工RS-485收发器。该器件具有片120Ω 终端电阻和驱动器输出压摆率控制等功能
    的头像 发表于 08-04 15:23 867次阅读
    Texas Instruments THVD1454<b class='flag-5'>半双工</b>RS-485收发器数据手册

    求助,关于半双工模式下的Uart问题求解

    目标是 2 个 XMC1404 启动套件运行半双工通信。为此使用了DAVE™ 。 通信配置为使用 p2.0 的 usic0 通道 0。为了使其工作,我必须重新编程 TX/RX 引
    发表于 07-30 07:00

    Texas Instruments THVD24x9半双工RS-485收发器数据手册

    Texas Instruments THVD24x9半双工RS-485收发器通过标准8引脚SOIC和小型10引脚VSON封装中集成瞬态电压抑制器 (TVS) 二极管,实现了集成浪涌保
    的头像 发表于 07-23 10:25 616次阅读
    Texas Instruments THVD24<b class='flag-5'>x</b>9<b class='flag-5'>半双工</b>RS-485收发器数据手册

    双工不匹配如何修复它

    ,确保所有相关设备的双工模式一致,例如都设置为全双工半双工。 启用自动协商功能:推荐在所有端口启用自协商功能,以便设备能够自动匹配最佳的
    的头像 发表于 07-02 09:46 412次阅读

    ADM2491E 5 kV信号隔离、高速(16 Mbps)、ESD保护、全/半双工RS-485收发器技术手册

    ADM2491E是一款隔离的数据收发器,具有±8 kV ESD保护功能,适合多点传输线路的高速半双工或全双工通信。对于半双工工作,发送器输出与接收器输入共用相同的传输线路。发送器输出引
    的头像 发表于 06-06 10:50 1015次阅读
    ADM2491E 5 kV信号隔离、高速(16 Mbps)、ESD保护、全/<b class='flag-5'>半双工</b>RS-485收发器技术手册

    带耦合器的大规模物联网半双工前端模块 skyworksinc

    电子发烧友网为你提供()带耦合器的大规模物联网半双工前端模块相关产品参数、数据手册,更有带耦合器的大规模物联网半双工前端模块的引脚图、接线图、封装手册、中文资料、英文资料,带耦合器的大规模物联网半双工前端模块真值表,带耦合器的大
    发表于 05-09 18:35
    带耦合器的大规模物联网<b class='flag-5'>半双工</b>前端模块 skyworksinc

    双工分轨语音数据集:让AI实现无缝对话

    双工语音交互是一种允许设备接收语音的同时并行处理和响应的技术。传统半双工模式下,用户需要说完一句话后等待系统响应,交互效率低且体验不自然;而全
    的头像 发表于 04-10 09:39 566次阅读
    全<b class='flag-5'>双工</b>分轨语音数据集:让AI<b class='flag-5'>实现</b>无缝对话

    CKS32F107xx系列USART的特性和功能

    半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
    的头像 发表于 02-18 16:58 1078次阅读

    SN65HVD3083EDGSR半双工时怎么接线?

    请问ti工程师SN65HVD3083EDGSR 这颗芯片半双工时怎么接线?
    发表于 01-01 08:12

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】UART串口通信-收发回显

    一.串口介绍 USART是全双工通用同步/异步收发器,是一种串行的设备。嵌入式开发设计中经常被使用到,广泛的被应用于主机与外围设备的通信交互中,应用相当的广泛。 UART和 USART有
    发表于 12-15 17:32