STM32L011K4 uart串口多机通信 的问题
   本人在使用stm32L0114K做多机通信,一个主机给多个从机通过串口发消息,因此从机的串口需要被配置成不同的地址,并且使用静默模式。然后问题来了。
 手册上说设置为静默模式,需要把RQR寄存器中的MMRQ位置1,但是无论怎么写,这位都没有被写成1,一直是0,所以现在很困惑。
 不知道是自己配置有误,还是寄存器那位禁止这样的写操作(但是我并没有在手册上看到)?
0

2个回答

本人在使用stm32L0114K做多机通信,一个主机给多个从机通过串口发消息,因此从机的串口需要被配置成不同的地址,并且使用静默模式。然后问题来了。
手册上说设置为静默模式,需要把RQR寄存器中的MMRQ位置1,但是无论怎么写,这位都没有被写成1,一直是0,所以现在很困惑。
不知道是自己配置有误,还是寄存器那位禁止这样的写操作(但是我并没有在手册上看到)?
后面会贴代码,十分渴望各位朋友们给我进行些点播,谢谢大家!

这个代码就是测试RQR寄存器中的MMRQ位是否为1,但是它就是不为1:
int main(void)
{

HAL_Init();

/* Configure the system clock to 2 MHz /
SystemClock_Config();
/
¾²Ä¬Ä£Ê½ */

/* Configure LED3 */
BSP_LED_Init(LED3);

/*##-1- Configure the UART peripheral ######################################*/
/* Put the USART peripheral in the Asynchronous mode (UART Mode) /
/
UART configured as follows:
- Word Length = 8 Bits
- Stop Bit = One Stop bit
- Parity = None
- BaudRate = 9600 baud
- Hardware flow control disabled (RTS and CTS signals) */
UartHandle.Instance = USARTx;

UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
UartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_MultiProcessor_Init(&UartHandle, 1, UART_WAKEUPMETHOD_ADDRESSMARK) != HAL_OK) //给串口配置地址
{
Error_Handler();
}
HAL_MultiProcessorEx_AddressLength_Set(&UartHandle, UART_ADDRESS_DETECT_7B); //串口地址长度
HAL_MultiProcessor_EnableMuteMode(&UartHandle); //串口使能静默模式
HAL_MultiProcessor_EnterMuteMode(&UartHandle); //串口进入静默模式,就是把MMRQ设为1(这个的具体代码贴在后面)
if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
{
Error_Handler();
}

if(HAL_UART_Init(&UartHandle) != HAL_OK)
{
Error_Handler();
}

     if((USART2->RQR &UART_MUTE_MODE_REQUEST) == 0)  //这里仅仅想判断一下寄存器这位数据是不是已经被赋值为1了,但是并没有
 {
      BSP_LED_On(LED3);
      HAL_Delay(1000);
      BSP_LED_Off(LED3);
      HAL_Delay(1000);
      BSP_LED_On(LED3);
      HAL_Delay(1000);
      BSP_LED_Off(LED3);
 }
 else
     BSP_LED_On(LED3);
    }

/*开始静默模式,即给RQR寄存器的MMRQ位写入1*/
void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
{
__HAL_UART_SEND_REQ(huart, UART_MUTE_MODE_REQUEST);
}

0

如果有朋友有类似的经验,求解惑啊!

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
串口多机通信
串口多机通信学习nn一、51单片机的主从模式,首先要设定工作方式3:(主从模式+波特率可变) n nSCON串口功能寄存器:SM0=1;SM1=1(工作方式3)nn注:主机和从机都要为工作方式3。nn工作方式2 (SM0 SM1 :1 0):串行口为11位异步通信接口。发送或接收一帧信息包括1位起始位“0”、8位数据位、1位可编程位、1位停止位“1”。发送数据:发送前,先根据通信协议由软件设置TB...
STM32_USART 多机通信学习笔记
实验用 mini 板的三个串口来演示多机通信,实验循循渐进地来演示串口的多机通信,力求让读者能够更好的了解什么是多机通信。当然这也是本人自己的学习多机通信的历程笔记。涉及到中断、 DMA 等内容,这里也会做些简单介绍。
UART的同步通信和异步通信,通信方式,多机通信,流控
    大致对UART做了一个简单的整理。nn异步通信:nnnn同步通信:nnnn nn串行的单工,半双工,全双工:nnnn串口的多机通信:nn nnnn nnnnUART的RTS, CTS:nn一、流控,顾名思义就是流量控制的意思。目的是协调收发双方,使数据不会丢失。nn二、很多人用了串口很久都不知道这回事,这是因为很多场合确实没有必要。收发双方波特率固定,并且接受数组足够大,这时不会出现接收方...
串口实验之多机通信
stm32串口通信实现多机通信,这是一个主机代码,从机代码可在此基础上进行修改。从机通过开发板上的按键选择要通信的主机。
串口主从通信方式 单片机从机实现
这里的demo是1对1的通讯的,1对多修改协议增加从机地址字段,并修改相关使用即可,这里截取项目中一个通讯任务。硬件平台  STM32   系统 freertos// #inlcude 略nnnntypedef struct{n uint8_t len;n uint8_t msg;n uint8_t payloadLen;n}_msg;nn#define FRAME_END_TIME 50//m...
多串口交互通讯流程图
多串口交互通讯流程图
总结一下STM32通过串口实现双机通信的方法,主机通过串口一发送,从机通过串口三接收,其他串口配置类似。
今天总结一下关于串口双机通信的方法,我们在日常项目开发中经常会用到串口,需要将一包数据从一个单片机发到另一个单片机上,经常会有人在这块儿遇到困难,要么会出现不能发送,或者不能接收,或者数据出现乱码,丢包,或者无法摘录出自己所需的某一帧数据,下来谈一谈自己的拙见。rnrnrnrn主机模块rn**rn要用到串口,第一步肯定是串口的初始化了,这一点想必大家都知道。rn串口初始化rnvoid uart_init(u32 ...
三大通信协议--UART、SPI、IIC
UART异步通信: nhttp://blog.csdn.net/gogomusic/article/details/54767502 nSPI同步通信: nhttp://blog.csdn.net/gogomusic/article/details/54783969 nIIC同步通信: nhttp://blog.csdn.net/gogomusic/article/details/79344139...
STC89C52MCU -- 双机通信及多机通信
单片机的通信有长距离短距离之分,通常一米之内成为短距离,1000左右成为长距离。如若更长距离,需要借助其他无线设备方可实现。通常单片机通信有以下四个方式:TTL电平通信(单片机串口直接互联)、RS-232C通信、RS-422A通信和RS-485通信等;n1. TTL电平通信n双机TXD和RXD互联,但是两个单片机必须共地,即把他们的系统电源地线连接在一起。单片机的TTL电平通信多在同一系统中。
(一)uart通信:基于51实现
51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。n当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。n无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。n在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。n看到过一些书籍和文章,在串口收、发数据的处理方法上,
基于UART以状态机的形式实现LIN通信
基于UART以状态机的形式实现LIN通信
单片机和串口设备通讯设计时要注意的几个问题
现在有很多外设喜欢通过UART接口进行通讯控制,比如串口WIFI模块,串口蓝牙模块,串口HMI等等。因为基本上每款单片机都有UART这个硬件设备,这使得通过UART来控制的外设可以在众多单片机系统中使用。rn单片机和单片机串口通讯,单片机和外设串口通讯,设计时要注意几点:rn第一,  是最基本,往往也是容易忽略的,就是电平匹配问题。3.3V和5.0V等不同电平的进行通讯时,要进过电平匹配电路,才能
合泰串口通信代码
这是一个合泰52352的串口测试程序,可以用来实现单片机与电脑之间的串口通信
单片机串口通信与电脑
#include <AT89X52.h>       //调用51单片机的头文件nn//---------------------------------------n//串口接收寄存器设置nunsigned char USARTbuf;    //设置8位的unsigend char型寄存器用来暂存串口接收内容nnnvoid main(void)            //主函数,单...
FPGA实现串口通信
1.原理介绍:FPGA实现串口通信,将8bit的数据按照从地位到高位的串口发送。将原理图P上来。nnnn2.通过与按键消抖模块利用top_down,让按键按一次,实现自加1,加到1111_1111。nn    按键产生数据程序:nnnmodule gen_data(n n input wire sclk,n input wire rst_n,n input wire key_out_in,...
UART串口通讯
先简单说说串口通信(UART),我做的这个实验只针对RS232标准,在fpga与上位机给出的rs232口之间通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。nnnnnn我们只关心RS232_TX和RS232_RX两个信号,RS232_TX是数据发送端口,RS232-RX是数据接受端口,简单的串口帧格式如图所示。nnnn帧格式为:1bit起始位,8bit数...
STM32串口通信(基于缓冲区)编程及遇到的问题总结
在写串口通信前阅读了STM32中文参考手册,然后满心澎湃地写代码。在这个过程中遇一些让人郁闷的事情,目前这些问题目前已经解决了,特此来总结一番。
vivado学习第二 串口通信
vivado学习第二 串口通信nnn奇偶校验位 n 奇偶校验位分为奇数校验位和偶数校验位,奇数和偶数的判断标准是依据发送一串或者一帧数据中“1”的个数。 n奇数校验:发送的数据位+奇数校验位中“1”的个数为奇数个,也就是说如果数据位的“1”的个数为奇数个,则奇数校验位为数字0;如果数据位的“1”的个数为偶数个,则奇数校验位为数字1。 n偶数校验:发送的数据位+偶数校验位中“1”的个数为偶数个,也就...
STM32通过串口实现双机通信,达到数据的准确发送与接收,这里上传的是从机接收工程。
单片机双机通信一直是个难点,我在这里做了一个简单的总结,具体的步骤在我的另一篇帖子里边放着,这里只放了,从机接收工程模板!
常用串行通信对比(SPI、I2C、UART)
一、几种常用串行通信方式对比n nSPI:n1、一主一/多从,串行同步通信。n2、主机模式下速度达到Fosc/2,从机模式达到Fosc/4,总体大于I2C。n3、可接三条线(单向传输、半双工),分别是数串行据输出/输入(SDO/I)和串行时钟。可以加第四根线,第四根线在多从机模式下,作为片选线路(CS)。n4、通信原理:n            A.遵循串行通信协议,数据一位一位传输
STM32F103串口通讯注意事项。
github:https://github.com/oraSCnnnn(1)通过串口不断发送数据nn库函数中的nnnvoid USART_SendData(USART_TypeDef* USARTx, uint16_t Data);nn函数不具备缓存作用,当我们需要连续不断发送一段数据时,我们需要等待前一次数据发送完成,放置数据丢失错误nnnvoid usart2_send_char(u8 _c...
STM32开发 -- UART应用层通信协议分析
拿到一份UART的通信协议,上手来操作之前先做一下分析。nnnn一、帧格式说明nn先看一下它的帧格式说明:nn1、 帧头标志Head n不论是命令帧还是响应帧,帧头标志都是0x92。 n2、 协议版本 n协议版本号(4bit),目前值为1 n加密方式(4bit),0表示采取“数据不加密+校验和”方式。 n所以,当前此字段完整值为0x10 n3、 控制字段中的C/R比特 n用于指示该帧是命令帧...
Arduino的多串口通信问题
对于Arduino的串口通信,主要有硬件串口和软串口。当然硬件串口相对于软串口要可靠地多。 n以下将对mega2560的硬件串口和软串口进行描述。 n* 硬件串口* nArduinoMega有四个硬件串口,想想也够用了吧,不过要是还不够用那就加软串口喽。 n串口与引脚对应为: n 0——Rxd0 1——-Txd0 n ...
基于FPGA Uart串口通信实验
基于FPGA Uart串口通信实验首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同。nUART简介 n通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。UART通信在工作中相当常见,项目中需要生成uart信号,在博客中记录下。uart是异步通信,因为它只有一根线就可以数据的通信。不像SPI,I2
两种方法实现stm32的8个串口通信
100引脚的stm32f103vet6只有5个内置的串口控制器,那么如何实现8个串口通信呢?方法1:用普通的io模拟串口通信。这里除了IO端口外,还需要一个定时器来控制发送和接收的波特率。定时器的定时单位一般为1位数据的发送时间。假设波特率为vRate,那么定时时间为1/vRate;但是如果波特率比较大的话(250000bps),定时时间一般要<(1/VRate),以为一些其他额外指令的执行时间,不
51 单片机的多机通信
;51 单片机的多机通信,有些特殊。它专有一个控制位 SM2 。;当把 SM2 设置为 1 后,单片机的串口,就仅仅接收《第 9 位为 1 的数据》。;对方发送的《第 9 位为 0 的数据》 ,接收机的串口是不理会的。--百度空间的排版较差,引号,显示的很小,不够醒目,故用书名号来代替。;本来,串行通信的第 9 位数据,通常都理解成奇偶校验位,还是可有可无的。;但是,在 51 单片机多机通信的场合
实测亲测xilinx fpga uart 串口rs232例子实例工程,不出错发送接收数据测试,节省资源3根线串口,可以学习ip core用法verilog写
实测亲测xilinx fpga uart 串口rs232例子实例工程,ISE打包工程,不出错发送接收数据测试,无状态机,节省资源3根线串口,可以学习rs232串口和倍频ip core用法,字节编写,用verilog编写 基于一个xilinx的学习板子,具体io配置请看工程,测试内容内容是 pc 用 uart rs232发一个字节到fpga,fpga收到之后马上把字节加1发回给pc,uart的波特率是50m时钟,用到了ise的pll倍频,可以学习pll用法,uart 的 verilog 代码没有用到状态机,只用到txd,rxd,gnd这3根最基本的串口通讯线,极大的简化了fpga资源。整个工程打包,方便大家下载到之后可以马上用,相信对初学xilinx fpga 或者 ip cone用法的初学者来说,学习很用帮助。
基于FPGA的UART串口通信
通过串口调试助手PC发送16bit给FPGA,FPGA接收后返还给PC。串口通信其实没我们想象中的那么难,只要花点时间去理解,很快就会上手,在直入正题前,先来一点基础知识。串口是指发送和接收数据的串行口,就是我们打开电脑设备管理器后看到的COM口。FPGA或单片机的板子中很多都用到的是UART(通用异步收发传输器)和RS232。UART:计算机内部采用并行数据,不能直接把数据发到Modem,必须经...
【蓝桥杯单片机组】(6)uart
(1)波特率的概念:1bps = 1 bit/sn(2)板载资源有两个串口,仅UART1可以通过USB连接电脑n(3)四种方式波特率计算公式:(fosc:晶振频率 )n方式1:baud = fosc / 12;n方式2:baud = (2^smod / 32) * (T1溢出率)n方式3:baud = (2^smod / 64) * foscnn方式4:baud = (2^smod
ARM基本接口之串口通信实验
ARM基本接口之串口通信实验实验目的:1.掌握ARM的串行口工作原理;2. 学习并编程实现ARM的UART通信;3. 掌握S3C2440寄存器配置方法。实验步骤:1. 总体步骤:先编译,打开超级终端,启动目标机,待显示2440后,进行创建链接,下载, 运行。 2. 实验过程:先连接超级终端,首次连接失败,原因是:硬件接口接触不良,换了一台电 脑后,成功连接。原来的代码是将字符接収和发送...
STM32串口实现1-wire(二)
STM32串口实现1-wire(二)上一篇利用串口的半双工实现对1-wire协议的操作,利用单线半双工有个问题就是在读取1-wire总线设备(18B20)时,如果设备输入低电平时可能会造成电平不能完全拉到低电平,甚至烧掉TX管脚。 n想法:既然内部将TX和RX相连接不好做,就再外部让TX和RX相连接。不利用stm32单线模式。通过一个二极管配合选通。 n nDATA连接到1-wire总线设备(DS1
使用UART(串口注意事项)
1. 串口每次传输都是1个字节(8位)。例如IIC都可以一次通信传输多个字节;rn2. 如果要解析多个数据可以用DMA和UART来配合使用;rn3.UART每次传输完一个字节都会产生一次中断;
串口常见问题之ORE错误
                                                 问题:UART5不能正常接收摄像头数据原因:串口的抢占优先级不同导致抢占优先级高的串口(UART5)发生ORE错误(中文参考手册683)实例分析:       省赛使用三个串口,USART1(蓝牙),USART3(定位系统),UART5(摄像头),其中USART1目前不接受数据,所以不用考虑其对其他串...
主从模式的多机通讯详细制作和仿真
单片机多机通讯 串口主从模式的多机通讯,一机对多机的控制.
STM32 FreeModbus RTU从机移植以及UART配置
FreeModbus的具体介绍就不提了。至于为什么要移植,大概就是因为移植比较快,而且比较稳定,可以减少因为自己编写出现的漏洞。 n但是FreeModbus 1.5版本是没有主机的,因此移植的时候只可以做从机。网上有几个关于Modbus主机的源代码,回头等我弄好了再更新。
软件模拟串行通信——UART协议实现
双单片机通信,MCU资源受限,无法使用片上UART通道,只可用普通I/Onn 使用2个普通I/O端口,通过软件实现UART协议的数据全双工收发,可移植其它单片机
ARM进阶 004 串口通信
预备知识一:外设如何学习?n1)外设的工作原理n2)2440芯片如何来支持外设(是否有内置的外设控制器,如有则学习控制器的工作方式;如果没有则通过GPIO模拟外设的工作时序)n3)看原理图,设备接在哪些引脚上,找到相应的引脚,配置成相应的功能n*4)看设备的数据手册,了解设备的控制方式nnn预备知识二:串口通信n在通信领域内,有两种数据通信方式:并行通信(略)和串行通信。
【STM32L系列】+NUCLEO-L011K4体验资料
刚玩不久,比较新的东西资料的确少啊!下面来一期连载为大家分享(NUCLEO-L011K4)挖坑和填坑!!!!!!!!!!!n这是网上最全的中文资料:nhttp://bbs.eeworld.com.cn/thread-489726-1-1.htmln玩一款新的芯片一定要从DataSteeet开始,不然掉入深坑可就爬不出来了n下面上传DataSteeet和引脚图。nn nnnn DataSteeet好...
USART的最高通信速率
最高通信速率是系统时钟频率比上采样率,比如STM32F407,就是168M/16=10.5Mbps.
51单片机多机通信(类IIC方式)
利用51单片机俩个引脚,制作的类IIC多机通信 资源含有proteus电路仿真图,拥有三个工程源码,分别是主机和俩个从机。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链培训机 大数据机构图