STM32 跟触摸屏modbus-rtu通信问题(485)

2019-07-20 12:27发布

[mw_shl_code=c,true]void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)//判断是否发生TIM2更新中断 { TIM_Cmd(TIM2,DISABLE); //关掉定时器2 TIM_SetCounter(TIM2, 0);//重新设初值0 if(recenum >= 8) { Uart1_rev_flag = 1;//接收完毕一帧,置位标志位,通知主函数调用接收处理函数 USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);//失能串口1接收中断 } recenum = 0; GPIO_SetBits(GPIOF,GPIO_Pin_13);//485发送使能 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清除TIM2的中断待处理位 TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除TIM2待处理标志位 } } void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//接收中断 { USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除USART1中断待处理位RXNE(RXNE=0) if(Uart1_rev_flag != 1) { if(recenum < 12)//接收分8字节数据 和11字节数据 { ReceBuf[recenum] = USART1->DR; recenum++; TIM_Cmd(TIM2, ENABLE); TIM_SetCounter(TIM2, 0); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); } } } /*if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET) { USART_ClearITPendingBit(USART1,USART_IT_TXE);//清除USART1中断待处理位RXNE(RXNE=0) USART_SendData(USART1,ReceBuf[sendnum]); sendnum++; if(sendnum == 8) { LED4(ON); sendnum = 0; USART_ITConfig(USART1,USART_IT_TXE,DISABLE); //USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打开接收中断使能 //GPIO_ResetBits(GPIOF,GPIO_Pin_13);//485使能接收 } }*/ //溢出-如果发生溢出需要先清空SR的溢出位,再读DR寄存器 则可清除不断入中断的问题 if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)!=RESET) { USART_ClearFlag(USART1,USART_FLAG_ORE); //清溢出位 USART_ReceiveData(USART1); //读DR } }[/mw_shl_code] 这是我中断函数,为什么我接收到的第一个数据不是设备地址0x01,但是我用串口监控,看到的是01 03 00 00 00 01 84 0A,但是接收之后就不行了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
翱翔云端的鸟
1楼-- · 2019-07-22 11:37
回复【19楼】菜鸟stm32:
---------------------------------
没有用过这个虚拟主机端,你用串口调试助手查查看,是不是你的从机没有响应
yangjf_sz
2楼-- · 2019-07-22 15:42
 精彩回答 2  元偷偷看……
简_单
3楼-- · 2019-07-22 19:13
 精彩回答 2  元偷偷看……
菜鸟stm32
4楼-- · 2019-07-22 20:12
回复【20楼】翱翔云端的鸟:
---------------------------------用助手基本调试成功了,可stm32 和海泰克触摸屏通讯如何调试,通过触摸屏往stm32的里写数据,写入数据的地址写什么呢?
翱翔云端的鸟
5楼-- · 2019-07-22 21:50
 精彩回答 2  元偷偷看……
翱翔云端的鸟
6楼-- · 2019-07-23 00:01
[mw_shl_code=c,true]发送格式 01 03 00 00 00 01 84 0A 从机地址 功能码 起始地址高|低 寄存器数高 低 CRC低 高 ReceBuf[];//接收缓冲区 Recenum;//接收字节数 响应格式 01 03 02 00 00 ... B8 44 从机地址 功能码 数据字节数 数据1高 数据1低 CRC低 高 数据字节数 = 传送数据个数*2 SendBuf[];//发送缓冲区 Sendnum;//发送字节数 SendBuf[2] = Sendnum - 5; 发送格式: 01 10 00 00 00 01 02 00 0F E6 54 从址 功号 起始地址高低 数量高|低 字节数 数据高|低 CRC低 高 字节数ReceBuf[6] = 2*数据个数 响应格式 01 10 00 00 00 01 01 C9 从机地址 功能码 起始地址高|低 数量高 | 低 CRC低 高[/mw_shl_code] 附上自己写的两个modbus-RTU功能码格式说明  

一周热门 更多>