初级会员

- 积分
- 123
- 金钱
- 123
- 注册时间
- 2012-8-26
- 在线时间
- 11 小时
|
20金钱
用uart4来做485(TX H13,RX H14的复用功能uart4)通讯,初始化后循环发送rs485SendBuf[8]={0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A}的数据,每发送一次电脑那边接收一直为一个0x00,查看初始化后uart4的isr寄存器状态,里面的CMF和FE位置1了,为何会置1不解,在后面加了清除这两个标志的语句后仍然发送数据为一个0x00,有知道原因的吗?
代码如下:
void SRS485_Init(u32 bound)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_UART4_CLK_ENABLE();
//2RS485 TX\RX IO
GPIO_Initure.Pin=GPIO_PIN_13|GPIO_PIN_14;
GPIO_Initure.Mode=GPIO_MODE_AF_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Initure.Alternate=GPIO_AF6_UART4;
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
//2RS485 RE IO
GPIO_Initure.Pin=GPIO_PIN_0;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
UART4_RS485Handler.Instance=UART4;
UART4_RS485Handler.Init.BaudRate=bound;
UART4_RS485Handler.Init.WordLength=UART_WORDLENGTH_8B;
UART4_RS485Handler.Init.StopBits=UART_STOPBITS_1;
UART4_RS485Handler.Init.Parity=UART_PARITY_NONE;
UART4_RS485Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;
UART4_RS485Handler.Init.Mode=UART_MODE_TX_RX;
HAL_UART_Init(&UART4_RS485Handler);
__HAL_UART_CLEAR_IT(&UART4_RS485Handler,UART_CLEAR_TCF);
#if EN_UART4_RX
__HAL_UART_ENABLE_IT(&UART4_RS485Handler,UART_IT_RXNE);
HAL_NVIC_EnableIRQ(UART4_IRQn);
HAL_NVIC_SetPriority(UART4_IRQn,3,4);
#endif
SRS485_TX_Set(0);
__HAL_UART_CLEAR_FLAG(&UART4_RS485Handler,UART_CLEAR_CMF);
__HAL_UART_CLEAR_FLAG(&UART4_RS485Handler,UART_CLEAR_FEF);
}
void SRS485_Send_Data(u8 *buf,u8 len)
{
u8 i=0;
SRS485_TX_Set(1);
HAL_UART_Transmit(&UART4_RS485Handler,buf,len,1000);
SRS485_RX_CNT=0;
SRS485_TX_Set(0);
}
|
|