STM32 485和LABVIEN上位机通讯

 

* STM32向串口3发送1字节                                           */
/*                                                                 */
/*                                                                 */
/*******************************************************************/
void Uart3_PutChar(u8 ch)
{
  /* 发送使能 */
  GPIO_SetBits(GPIOF, GPIO_Pin_10);  /* DE = 1 */
  /* 接收禁止 */
  GPIO_SetBits(GPIOF, GPIO_Pin_11);  /* nRE = 1 */

  USART_SendData(USART3, (u8) ch);
  while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET); //注意此句与RS232不同

  //注意:因为RS485的半双工方式,在RS485发送数据完毕后,需要把RS485设置在接收状态,否则收不到主机的数据
  /* 接收使能 */
  GPIO_ResetBits(GPIOF, GPIO_Pin_11);  /* nRE = 0 */
  /* 发送禁止 */
  GPIO_ResetBits(GPIOF, GPIO_Pin_10); /* DE = 0 */
}

/*******************************************************************/
/*                                                                 */
/* STM32在串口3接收1字节                                           */
/* 说明:串口接收中断                                              */
/*                                                                 */
/*******************************************************************/
void USART3_IRQHandler(void)            //在中断服务程序中,由于主机响应中断时并不知道是哪个中断源发出中断请求,因此必须在中断服务程序中对中断源进行判别,然后分别进行处理。当然,如果只涉及到一个中断请求,是不用做上述判别的。但是无论什么情况,做上述判别是个好习惯
{
  /* 接收使能 */
  GPIO_ResetBits(GPIOF, GPIO_Pin_11);  /* nRE = 0 */
  /* 发送禁止 */
  GPIO_ResetBits(GPIOF, GPIO_Pin_10); /* DE = 0 */

  if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)    //若接收数据寄存器满
  {    
    comm = USART_ReceiveData(USART3);   //此语句作用:将USART_DR寄存器的内容传到comm里。另外,在单缓冲器模式下,软件读USART_DR寄存器则完成对RXNE位清除。[注意]在多缓冲器模式下,必须通过软件清零"传输完成标志"DMA1_FLAG_TCx(即:令DMA_IFCR的位CTCIFx=1),否则将会无法跳出中断服务程序,出现一次中断请求无数次响应的后果
   
 if(comm == 0x63)                    //上位机自动查找采集器是否在线
 {     
   comm = 0;     
      Uart3_PutChar(0x63);              //发送CP的ASCII码
      Uart3_PutChar(0x70);                                  
 } 
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值