本人在使用stm32L0114K做多机通信,一个主机给多个从机通过串口发消息,因此从机的串口需要被配置成不同的地址,并且使用静默模式。然后问题来了。
手册上说设置为静默模式,需要把RQR寄存器中的MMRQ位置1,但是无论怎么写,这位都没有被写成1,一直是0,所以现在很困惑。
不知道是自己配置有误,还是寄存器那位禁止这样的写操作(但是我并没有在手册上看到)?
STM32L011K4 uart串口多机通信 的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答
- momoxihuanni1 2017-10-18 07:39关注
本人在使用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);
}解决 无用评论 打赏 举报
悬赏问题
- ¥15 求差集那个函数有问题,有无佬可以解决
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
- ¥50 树莓派安卓APK系统签名
- ¥65 汇编语言除法溢出问题