int main(void)
{
systick_init(72); /*初始化Systick工作时钟*/
gpio_for_w5500_config(); /*初始化MCU相关引脚*/
reset_w5500(); /*硬复位W5500*/
set_w5500_mac(); /*配置MAC地址*/
set_w5500_ip(); /*配置IP地址*/
socket_buf_init(txsize, rxsize); /*初始化8个Socket的发送接收缓存大小*/
eMBInit(MB_RTU, 0x01, 0x01, 9600, MB_PAR_NONE); //初始化 RTU模式 从机地址为1 USART1 9600 无校验
eMBEnable(); //启动FreeModbus
while(1) /*循环执行的函数*/
{
do_tcp_client(); /*读取网关的数据*/
eMBPoll();
}
}
以上是主程序, STM32做客户端, 利用 W5500 读取网关的数据值,(传感器数据)函数do_tcp_client();
stm32 还移植了freemodbus , 用于接收 触摸屏(主机发送的数据)函数 eMBPoll(); 主要是控制命令
仿真时候发现,如果w5500和 modbus 单独工作都正常, 在有 do_tcp_client(); 函数时候modbus 不能实时响应, (发送多次命令才能响应一次)
个人认为,程序在执行 读取网络数据时候, 这是来了MODBUS命令 没有及时响应
但是 modbus 都是设置在中断发送和接收 按理不应该啊?
各位高手 指点下,怎么不冲突
在不移植操作系统的情况下?
|