高级会员

- 积分
- 507
- 金钱
- 507
- 注册时间
- 2014-1-24
- 在线时间
- 103 小时
|

楼主 |
发表于 2014-5-23 10:28:48
|
显示全部楼层
回复【6楼】正点原子:
---------------------------------
只配置一次,TIM1还是不工作,问题还是跟以前一样,也不知道哪有问题,还有一个串口问题,麻烦原子哥看看:
void USART1_IRQHandler(void) //串口1中断服务程序
{
static u8 Rxd_Num; //接收到的数据
u8 i=0, Send_Buf[TXDNUM];
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET) //接收中断置位
{
RXD_BUF[Rxd_Num++] =USART_ReceiveData(USART1); //(USART1->DR);
if(RXD_BUF[0] ==RXDFun) //若第一个字节为接受功能字继续接受
{
if(Rxd_Num == 3)
{
Rxd_Num = 0; //接受字节数清0
RXD_STA = 1; //标志位置位,认为接收完成
RXDArySep(); //处理接受数据
TXDAryCol(); //刷新采集数据
Send_Buf[0] = TXDFun; //功能字
Send_Buf[1] = TXD_BUF[0]; //返回数据高8位
Send_Buf[2] = TXD_BUF[1]; //返回数据低8位
Send_Buf[3] = RXD_BUF[1]; //上位机控制字高8位
Send_Buf[4] = RXD_BUF[2]; //上位机控制字低8位
for(i=0; i<TXDNUM; i++) //发送给上位机
{
USART_SendData(USART1, Send_Buf);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //等待发送完成
// USART_ClearFlag(USART1,USART_FLAG_TC); //清除发送完成标志位
}
}
}
else //第一个字节不是接受功能字
{
USART_ReceiveData(USART1); //读USART_DR寄存器完成对RXNE位清除
}
}
}
STM32接受正常,但是上位机一会能收到STM32回复的数据一会又收不到,复位一下还是老样子,STM32能正常执行上位机的指令,说明进入串口中断后能正常退出,有发送数据,但就是不正常。> |
|