stm32f uart 如何接受电脑串口发送的break 信号
请教一下论坛内高手, 我看到老外的很多仪器上,串口通信软件,都会有个break 命名, 通过电脑串口发送break,来初始化仪器,通信。 想问一下,stm32f103 ,怎么样才能接受这个break信号,如何判断接受到这个break信号,应该如何判断。 用示波器看的tx管脚是有个电平变化。uart协议中有break 规定:
A Break character is interpreted on receiving “0”s for a frame period. At the end of the
break frame the transmitter inserts either 1 or 2 stop bits (logic “1” bit) to acknowledge the
start bit. 用逻辑分析或都示波器仪抓一下,或者用串口监控,看一下这个“break”到底是发的什么数据。
请抓个波形先。只要有准确的波形,就能给你分析出数据来 这个 *break* 是windows 串口api的 一个函数, 没有具体的协议字节的。 就是发个中断下去,唤醒下面的设备用的,比如下面的设备休眠,复位,通过这个break 唤醒的。
实际示波器看tx脚是拉一个跳变的方波出来。但是stm32 怎么来配置,响应这个信号,不知道?请高手指点一下。 MCU休眠的话,就采用外部中断唤醒。。。如果MCU正常工作,就采用外部中断,或者捕捉。。。 不是这个概念,串口中断唤醒的usart 的库文件中有 send_break的函数,不知道是怎么用的,我现在是pc串口发下来的break,stm32f103下不知道如何处理。 串口有一个 break 信号:正常情况下,安静的 UART 信号应该是高电平;如果连续低电平超过一个字符长度,这就叫做一个 break 信号。STM32 的 UART 是有这个 break 检测功能的,找一下 USART 设备 SR 寄存器里面的数据。 本帖最后由 stm1024 于 2018-3-28 18:00 编辑
你可以看看库函数是如何实现的,这个在stm32f10x_usart.c的618行(库版本3.5):/**
* @briefTransmits break characters.
* @paramUSARTx: Select the USART or the UART peripheral.
* This parameter can be one of the following values:
* USART1, USART2, USART3, UART4 or UART5.
* @retval None
*/
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Send break characters */
USARTx->CR1 |= CR1_SBK_Set;
}看看CR1寄存器中的字段:具体细节被硬件隐藏了,应该是和楼上所说的一样,要参考串口协议。
我们在usart.c 库里,有发送的函数,,但是接受的是没有的,* @briefTransmits break characters.
* @paramUSARTx: Select the USART or the UART peripheral.
* This parameter can be one of the following values:
* USART1, USART2, USART3, UART4 or UART5.
* @retval None
*/
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Send break characters */
USARTx->CR1 |= CR1_SBK_Set;
}
页:
[1]
2