if(uart2RxState) { /*unpack处理*/ HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10);//LED1 if(mc_check_crc16(uart2RxBuff,4) == (((uint16_t)uart2RxBuff[4]<<8))+uart2RxBuff[5])) ; uart2RxCounter = 0; uart2RxState = 0; } if(Flag2s) { HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);/...
port->set_rs485_direction(SET_RS485_RX); } } ⑦ transmit_chars更改一下,原先的代码是当没有更多的字符要发送(环形缓冲为空)时需要关闭发送中断,这时串口控制器发送BUF和移位寄存器中还是有数据的,这些数据串口控制器自动发送完成后才算结束,由于已经关闭了发送中断,因此发送结束后就没有中断产生了。但是RS485...
RS485_TX_EN = 1; // 使能发送 for (t = 0; t < len; t++) { while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); // 等待发送完成 USART_SendData(USART1, buf[t]); } while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); // 等待发送完成 RS485_RX_EN = ...
extern void ConfigUART(unsigned int baud); extern void UartRxMonitor(unsigned char ms); extern void UartWrite(unsigned char *buf, unsigned char len); void main(){ EA = 1; //开总中断 ConfigTimer0(1); //配置 T0 定时 1ms ConfigUART(9600); //配置波特率为 9600 while (1){ UartDriver(...
extern u8 RS485_RX_CNT; //接收到的数据长度 //模式控制 #define RS485_TX_EN PDout(7) //485模式控制.0,接收;1,发送. void RS485_Init(u32 bound); //初始化函数(485初始化用的是串口2所以用usart2的端口) void RS485_Send_Data(u8 *buf,u8 len); //发送 ...
初始化完成以后,就可以发送和接收数据了。如果要发送数据,只要把数据写入SCITXBUF即可,由串行通信SCI模块自动完成发送数据。如果要接收数据,只要把SCIRXBUF的内容读出即可(从引脚SCIRXD/IO移位来的信息由串行通信SCI模块本身自动去掉起始位、停止位、校验位,并将数据放到SCIRXBUF中)。代码如下:...
RS485_RX_CNT=0; GPIO_ResetBits(GPIOC,GPIO_Pin_12); } //RS485查询接收到的数据 //buf:接收缓存首地址 //len:读到的数据长度 void RS485_Receive_Data(u8 *buf,u8 *len) { u8 rxlen=RS485_RX_CNT; u8 i=0; u8 lenx = 5; *len=0; //默认为0 ...
g_RS485_rx_cnt = 0; RS485_RE(0); /* 进入接收模式 */ } 3、编写接收中断函数 /** * @brief RS485查询接收到的数据 * @param buf : 接收缓冲区首地址 * @param len : 接收到的数据长度 0 - 表示没有接收到任何数据,其他 - 表示接收到的数据长度 ...
if(g_rx485_filter_sate) { xQueueGenericSendFromISR(g_485buf_queue, g_rx485_tmp_buff, NULL, queueSEND_TO_BACK); g_tx_block_flag = false; } } } } } 有兴趣的小伙伴,可以下载工程了解下 项目工程下载链接: https://download.csdn.net/download/xtudj/90474572...
如果按键按下了,就会发送数据,就会产生接收中断,就会往我们定义的接收缓冲区(RS485_RX_BUF[64])里写数据,RS485_RX_CNT计数器的值也就开始自增,对应在RS485_Receive_Data();函数中就会进入里面的if语句,从之前定义的接收缓冲区(RS485_RX_BUF[64])里面取数据。