问题描述 :在淘宝买了一块51接口板 有485接口,向他发送固定格式的指令就会返回传感器的信息 . stm32写程序按一次发送一次这种格式的指令,但是只有第一次发送会返回数据,第二次按就进入不了接收中断了 。重启stm32还是这样。 找了两天问题也没找到,求原子哥给点拨点拨
主要代码:
[mw_shl_code=c,true]
[mw_shl_code=c,true]
[mw_shl_code=c,true]//发送读数据指令
//返回0表示发送完毕
int cmd_read()
{
unsigned char readCmd[8]={0x01, 0x03, 0x90, 0x01, 0, 0x09, 0xF9, 0x0C};
int i=0;
TX_Mode();//发送模式
for(i=0;i<8;i++)
{
USART_SendData(USART3, readCmd);//发送数据
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE) == RESET);
}
delay_us(500);//不延时第一次按都进不了中断,不知道为什么
RX_Mode();//接收模式
return 0;
}
[/mw_shl_code]
[mw_shl_code=c,true]int main(void)
{
u8 i = 0,k;
u8 res=1;
SystemInit();//系统初始化,主频设置为72MHz
delay_init(72);//滴答时钟初始化设置
USART1_Config();//串口输出初始化
RS485_Config(); //485初始化
NVIC_485_Configuration();//485中断初始化
GPIO_KEY_Config();//按键初始化
printf("
RS485测试
");
USART_Cmd(USART3, ENABLE);
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//使能接收中断[/mw_shl_code]
RX_Mode();
[mw_shl_code=c,true] while(1)
{
if(ReadKey()== KEY1)
{
printf("开始发送指令
");
res=cmd_read();
while(res);//等待指令发送完毕
printf("指令发送完毕
");
while(RxCounter < RxBufferSize)//等待接收完成
{
;
}
printf("
接收到的数据:");
for(k=0;k<RxCounter;k++)
printf("%x ",RxBuffer[k]);//打印接收数据
printf("
");
res=1;
RxCounter = 0;//清空接收计数
}
}
}[/mw_shl_code]
void USART3_IRQHandler(void) //rs485中断
{
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
{
USART_ClearITPendingBit(USART3, USART_IT_RXNE);//清除接收中断标志位
RxBuffer[RxCounter++] = USART_ReceiveData(USART3);//读取接收数据
}
}
[/mw_shl_code]
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
串口助手接受的数据
第一次按key1有数据返回 ,第二次 指令发送完,没有数据返回
一周热门 更多>