精华内容
下载资源
问答
  • STM32的半双工异步通信
    2020-11-06 10:17:31

    单线半双方模式通过设置USART_CR3寄存器的HDSEL位选择。在这个模式里,下面的位必须
    保持清零状态:
    ● USART_CR2寄存器的LINEN和CLKEN位
    ● USART_CR3寄存器的SCEN和IREN位
    USART可以配置成遵循单线半双工协议。在单线半双工模式下,TX和RX引脚在芯片内部互
    连。使用控制位”HALF DUPLEX SEL”(USART_CR3中的HDSEL位)选择半双工和全双工通信。
    当HDSEL为’1’时
    ● RX不再被使用
    ● 当没有数据传输时,TX总是被释放。因此,它在空闲状态的或接收状态时表现为一个标准
    I/O口。这就意味该I/O在不被USART驱动时,必须配置成悬空输入(或开漏的输出高)。
    除此以外,通信与正常USART模式类似。由软件来管理线上的冲突(例如通过使用一个中央仲裁
    器)。特别的是,发送从不会被硬件所阻碍。当TE位被设置时,只要数据一写到数据寄存器上,
    发送就继续。

    [文章转载自STM32参考手册]

    更多相关内容
  • stm8模拟串口收发(半双工
  • ESP32与STM32的SPI半双工通信,含握手协议,esp-idf版本v4.0.1(利用VSCODE,内含bin二进制文件)包含STM32CUBEMX工程模板,STM32版本为F446
  • stm32uart单线半双工通信 在使用数字舵机时,所用到的通信方式为uart通信,但舵机只有三根接线,出去vcc和gnd,只有一条通信线,也就是说要实现双向通信,只能使用单线半双工模式,本人在利用stm32标准库配置uart...
  • 单线半双工通信的官方资料 单线半双方模式通过设置USART_CR3寄存器的HDSEL位选择。在这个模式里,下面的位必须保持清零状态: ● USART_CR2寄存器的LINEN和CLKEN位 ● USART_CR3寄存器的SCEN和IREN位 USART可以配置...
  • STM8 UART 半双工串口通信

    热门讨论 2011-09-06 08:01:19
    STM8 串口通信模板 要实现的功能需要自己添加
  • 一个简单的单线半双工例程,使用标准库,使用正点原子STM32F103ZET6。按KEY0向电脑发送"TEST"字符串,收到电脑的数据LED1会亮。需要使用CH340模块。
  • 使用proteus8.9仿真实现两个stm32通过GPIO PA9实现单个GPIO实现串口的半双工收发,重新编译两个工程代码,仿真里面如果有连接PA10的话把PA10去掉。一个stm32发送按键再另一个stm32上面显示按键次数,另一个发送rtc...
  • 文章目录1、概述2、串口主要特点3、UART功能描述4、UART主要...STM8 的 UART 提供范围的波特率选择,并且支持多处理 器通讯。UART 也支持LIN(局部互联网)协议版本 1.3,2.0,和 2.1 以及在主模式 下的 J2602。 UART1

    1、概述

      STM8S 微控制器家族的通用同步异步收发器(UART1,UART2 或者 UART3) 提供了一种灵活的方法与使用工业标准 NRZ 异步串行数据格式的外部设备之间 进行全双工数据交换。STM8 的 UART 提供范围的波特率选择,并且支持多处理 器通讯。UART 也支持LIN(局部互联网)协议版本 1.3,2.0,和 2.1 以及在主模式 下的 J2602。

    UART1 和 UART2 具有以下扩展特征:
    1、UART2 和 UART3 支持 LIN 从模式。
    2、UART1 和 UART2 支持同步单向通讯,也支持智能卡协议和 IrDA 规范。 UART1 支持半双工单线通讯。

    关于每个STM8 微控制器型型号中的可用UART 配置信息,请查阅数据手册。

    展开全文
  • 最近突然接手一个项目... 首先翻了下StrongerHuang的例程,没有,看来还是只能自己来了,在这也对StrongerHuang表示感谢,找到datasheet,这里直接可以看到STM8支持单线半双工,还有别的方法,后面再说。    既...

     最近突然接手一个项目,很基础的一些单片机操作就可以完成,唯一值得说道的就是受限于任务要求,需要采用单线通信方式。拿到这个要求的时候有点懵,之前倒是从来没有用过单线的串口通信。
     首先翻了下StrongerHuang的例程,没有,看来还是只能自己来了,在这也对StrongerHuang表示感谢,找到datasheet,这里直接可以看到STM8支持单线半双工,还有别的方法,后面再说。
     main features
     既然有这样的功能,那么再找找Reference manual看,所有的信息如下:
     single wire half duplex
     可以看到讲得很简单,主要就是控制寄存器的配置和引脚的设置。按照这个搞了一天都没有弄出来。问题主要出在哪呢(直接马后炮)?
     

    • 引脚使用。上面提到了单线半双工使用的是Tx脚,Rx脚是不用的。因为我这里主要是为了和上位机通信,另一端使用的是CH340做的模块,而无法将其设置为单线半双工模式,所以一定记得在发送和接收时切换CH340这端的Tx和Rx,比如做一个单刀双掷开关在切换时直接拨。
    • 引脚配置。最后是在看了官方固件库之后完成的,这里有句话很有意思,Apart from this, the communications are similar to what is done in normal UART mode. 所以官方固件库的做法就是先按照正常配置,然后最后来个HDSEL的设置就OK了。而不要先去做别的配置(好吧,不求甚解了,按照官方配置通信没有问题之后没有去深究为什么)。

    最后,Talk is cheap, show you my code.

    //直接基于StrongerHuang的例程修改的,只展示最关键的部分
    void UART_Initializes(void)
    {
      UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
      /* Enable UART1 Half Duplex Mode*/
      UART1_HalfDuplexCmd(ENABLE);
    }

    最后的这个半双工使能是这样的(STM8S的官方库里面有这个文件,路径是下面这个)

    STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\UART1\UART1_HalfDuplex

    void UART1_HalfDuplexCmd(FunctionalState NewState)
    {
      assert_param(IS_FUNCTIONALSTATE_OK(NewState));
    
      if (NewState != DISABLE)
      {
        UART1->CR5 |= UART1_CR5_HDSEL;  /**< UART1 Half Duplex Enable  */
      }
      else
      {
        UART1->CR5 &= (uint8_t)~UART1_CR5_HDSEL; /**< UART1 Half Duplex Disable */
      }
    }

    实际上就是对HDSEL进行了操作。其他的配置和串口的使用都跟普通的串口一样。不过如果是真实的半双工对半双工的话,就像手册里面说的,请设计好仲裁机构,注意通信的顺利完成。
    现在说说别的方式,最后并没有采用这个方案,因为设计硬件的人设计好了电路。那他是怎么设计的呢?就是直接把普通的串口利用两个光电隔离接在了一起,搜索了一下,这倒是很常见。
     

    展开全文
  • 基于STM32F103串口2的单线半双工收发,内嵌Dynamixel新版通信协议(protoco 2.0),代码简单好用。
  • stm32 USART串口半双工功能测试

    千次阅读 2019-10-29 01:05:34
    一、串口半双工 stm32的串口支持全双工使用,即数据可双向同时传递,特点是有Rx和Tx两根数据线。...stm32的串口也支持半双工 数据手册中对串口的半双工功能有以下描述: 注意: 开启半双工后Rx引脚不在使用 ...

    一、串口半双工

    • stm32的串口支持全双工使用,即数据可双向同时传递,特点是有Rx和Tx两根数据线。这很好,可以满足大部分需要的
    • 有些特殊场合,我们需要使用半双工,比如驱动某些数字舵机。这时数据也是双向传递,但是同一时刻只允许一个方向的数据进行传递。这种情况下只用到Tx这一根数据线。stm32的串口也支持半双工
    • 数据手册中对串口的半双工功能有以下描述:
      在这里插入图片描述
    • 注意:
      1. 开启半双工后Rx引脚不在使用
      2. Tx引脚应配置为开漏拉高
      3. USART1~USART6都支持半双工
      4. TE为1时是发送使能,注意这个不会被硬件封锁。换句话说只要TE为1,串口就一直处于发送状态不能接受。查看手册CR1寄存器部分:
        在这里插入图片描述
        可以看出:我们可以通过操作TE和RE位,配置串口处于仅发送或仅接受的状态

    二、示例代码

    1. 串口配置:

    配置和普通的没啥区别,不同处在于Rx不用配了;Tx配为开漏拉高;使用库函数void USART_HalfDuplexCmd操作HDSEL位使能或失能半双工模式

    void USART1_Half_Configuration(void)  
    {  
      	GPIO_InitTypeDef GPIO_InitStructure;  
      	USART_InitTypeDef USART_InitStructure;   
      	NVIC_InitTypeDef NVIC_InitStructure;
    	
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟
    	
    	GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1
    	
      	GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;  //开漏上拉
      	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  	
      	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
      	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  
      	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
      	GPIO_Init(GPIOA, &GPIO_InitStructure);  
    
    
      	USART_InitStructure.USART_BaudRate = 115200;  
     	USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
      	USART_InitStructure.USART_StopBits = USART_StopBits_1;  
      	USART_InitStructure.USART_Parity = USART_Parity_No;  
      	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
      	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
    	//USART_InitStructure.USART_Mode = USART_Mode_Rx ;
      	USART_Init(USART1,&USART_InitStructure);  
      	USART_HalfDuplexCmd(USART1, ENABLE);  	//注意这个,启动半双工模式
    
      	USART_Cmd(USART1,ENABLE);  
     	USART_ClearFlag(USART1, USART_FLAG_TC);
    	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断
    	
    	//Usart1 NVIC 配置
      	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//子优先级3
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
    	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器、
    	
    }  
    

    2. 串口模式切换

    操作串口CR1寄存器的TE位和RE位即可,不妨使用宏的形式

    #define readOnly(x)	x->CR1 |= 4;	x->CR1 &= 0xFFFFFFF7;		//串口x配置为只读,CR1->RE=1, CR1->TE=0
    #define sendOnly(x)	x->CR1 |= 8;	x->CR1 &= 0xFFFFFFFB;		//串口x配置为只写,CR1->RE=0, CR1->TE=1
    

    3. 一个简单的应用示例

    • USART1和USART2配置为半双工,从USART2发给USART1数据1开始,收到后将数据加一发给对方。
    • 连线:PA9 - PD5
    • debug观察res1和res2交替递增

    以下展示部分示例代码:

    //主函数部分
    int main(void)
    { 
    	u16 times=0;  
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    	delay_init(168);				//延时初始化 
    	LED_Init();		  		
    	USART1_Half_Configuration();	//串口1配置为半双工
    	USART2_Half_Configuration();	//串口2配置为半双工
    	
    	sendOnly(USART2);				//USART2只写
    	readOnly(USART1);				//USART1只读
    	USART_SendData(USART2,1);		//USART2先发给USART1
    	while(1)
    	{
    		times++;
    		if(times%30==0)LED0=!LED0;	//闪烁LED,提示系统正在运行.
    		delay_ms(10);   
    	}
    }
    
    //接收中断服务函数部分,完成数据互相发送
    u8 Res1;	//debug观察
    void USART1_IRQHandler(void)                
    {
    	
    	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
    	{
    		Res1 = USART_ReceiveData(USART1);
    		readOnly(USART2);
    		sendOnly(USART1);
    		USART_SendData(USART1,Res1+1);	//USART1发给USART2
    	} 
    } 
    
    u8 Res2;	//debug观察
    void USART2_IRQHandler(void)                	
    {
    	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) 
    	{
    		Res2 = USART_ReceiveData(USART2);
    		readOnly(USART1);
    		sendOnly(USART2);
    		USART_SendData(USART2,Res2+1);	//USART2发给USART1
      } 
    } 
    
    
    • 可以在github下载完整源码:完整源码,此程序在正点原子stm32f407平台测试通过
    展开全文
  • stm32f103单线半双工uart通信程序

    千次阅读 2020-11-05 13:10:22
    在使用数字舵机时,所用到的通信方式为uart通信,但舵机只有三根接线,出去vcc和gnd,只有一条通信线,也就是说要实现双向通信,只能使用单线半双工模式,本人在利用stm32标准库配置uart串口时,发现标准库配置较为...
  • stm32对讲机

    2018-10-25 17:35:39
    stm32对讲机使用speex语音压缩算法 nrf24l01进行无线传输
  • STM32 uart 单线半双工模式(cube版本) 1.引言 在某些场合下需要进行三线制串口通信(信号线只有一根),这就要求进行单线半双工的模式进行通信。在这种情况进行数据协议传输的过程中,信号端需要来回切换输入输出...
  • 串口的单线半双工模式(stm32f10x系列)

    千次阅读 热门讨论 2018-12-28 10:48:45
    正好手头上有块stm32的板子,看了看stm32的Usart,竟然发现支持的是单线半双工。232里面毕竟4根线,支持半双工也是各自独立地物理信道(大胆猜测,回头回顾一下以前草草使用的双线485,看看它的半双工)。第一次注意...
  • STM8 UART1 开启了读中断,初始化代码如下: // 配置串口参数为:波特率115200,8位数据位,1位停止位,无校验,禁止同步传输,允许接收发送 UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, ...
  • stm32---RS485半双工通信

    千次阅读 2019-08-13 15:01:00
    典型的串口通信标准有 RS232 和 RS485,RS232 是全双工点对点的通信,而 RS485 是半双工通信(2 线制),可以一点对多点进行组网,而且 RS485 是用缆 线两端的电压差值来表示传递信号,这与 RS232 电气特性大不一样...
  • STM32—串口通信

    2021-01-19 18:28:59
    它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用DMA方式,实现高速数据通信。...
  • STM32F4单线半双工串口配置

    千次阅读 2014-08-30 23:21:55
    下面是STM32F4的半双工串口配置方法,与普通串口配置方法有些许的不同,这里只需要使用TXD那根线就可以了。关键之处在于需要调用库函数USART_HalfDuplexCmd()。此外串口引脚需要配置成开漏模式。 void UART4_Ha
  • 使用stm32串口发送数据 ,串口是单线半双工模式,要求数据发送前串口变成发送模式,发送完后立即变回接收模式,发送操作使用DMA来发送,程序开了串口中断和DMA中断,串口中断主要是用于接收与解析数据,DMA中断是想...
  • STM8 模拟串口程序

    千次阅读 2016-09-28 16:03:57
    本程序使用IO口线模拟串口的接收(半双工模式),下面是程序的设计思路: 1、接收 默认串口的数据格式为 一位起始位+8位数据位+停止位,由于起始位为低电平,停止位为高电平。因此,RX线要使能外部中断,中断方式为...
  • 单线半双工通信.zip

    2020-04-04 14:33:26
    单线实现两块STM32通信,作为个人笔记的附带内容,涉及知识面窄。用正点原子STM32精英版与最小系统板通信,通信协议模拟AX12数字舵机的通信规则。
  • (以半双工STM32做master为例)如何握手呢?ESP32-IDF例程中的代码如下: //Called after a transaction is queued and ready for pickup by master. We use this to set the handshake line high. void my_post_...
  • STM8S_004_UART基本收发数据

    万次阅读 2017-05-05 22:47:06
    STM8 的 UART 提供宽范围的波特率选择,并且支持多处理器通讯。   主要特性 : Ø 全双工的,异步通信 Ø  高精度波特率发生器系统:发送和接收共用的可编程波特率,最高达 2.5Mbits/s Ø  可编程数据字长度 (8...
  • 同步博客地址:从STM32开始的RoboMaster生活:进阶篇 III [UART & USART] 项目&教程仓库:-STM32-RoboMaster- 1.0 什么是UART和USART?有什么区别嘛? 1.1 UART定义 Universal Asynchronous Receiver/Transmitter:...
  • 前言 在工程应用中,很多时间...基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: ...
  • STM32F4 CAN通信 CAN 是控制器局域网络 (Controller Area Network) 的简称,它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 1、...
  • 该工程使用STM32F030F4P6主控芯片,可实现2个模拟串口和1个芯片自身物理串口的应用。 全双工模拟串口 接收需要使用1个EXTI引脚中断,1个有DMA通道的TIM;发送需要1个独立TIM。 半双工模拟串口 接收需要使用1个EXTI...
  • STM8s103f3p3单片机只有一个串口,有时候在实际项目中,我们需要用到多个串口来实现项目要求,此时,我们可以通过IO口来模拟串口通信,在实现项目需求的同时,还大大降低了成本。 实验原理 默认串口空闲状态为高电平...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,659
精华内容 1,063
关键字:

stm8半双工