OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2513|回复: 1

关于485转串口模块(硬件自动转换) STM32的USART2接受的有关问题

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-4-30
在线时间
6 小时
发表于 2016-8-20 11:19:50 | 显示全部楼层 |阅读模式
发送端的数据通过485总线发送到485转TTL模块(485转串口,该模块是硬件自动转化,不是SP3485),STM32单片机的USART2接受,但无法接受到数据,不知道是什么原因?两边的波特相同,使用USB转ttl接受485转TTL的数据,完全可以显示!求大神指教
下面是代码:

u8 RS485_RX_BUF[64];  
u8 RS485_RX_CNT=0;                     
                                                                           
void RS485_Init(u32 bound)
{  
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;      
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  


        RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);
        RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,DISABLE);

        USART_InitStructure.USART_BaudRate = bound;//2¨ìØÂêéèÖÃ
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;


        USART_Init(USART2, &USART_InitStructure);
  
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
   
  USART_Cmd(USART2, ENABLE);                    

}


void USART2_IRQHandler(void)
{
        u8 res;            
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
        {                          
                res =USART_ReceiveData(USART2);         
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);
                if(RS485_RX_CNT<64)
                {
                        RS485_RX_BUF[RS485_RX_CNT]=res;               
                        RS485_RX_CNT++;                                                
                }
        }                                                                                          
}



void RS485_Receive_Data(u8 *buf)
{
        u8 i;
        delay_ms(10);               
        if(RS485_RX_CNT)
        {
                for(i=0;i<RS485_RX_CNT;i++)
                {
                        buf=RS485_RX_BUF;        
                }               
                RS485_RX_CNT=0;        
        }
}

void BEEP_485(void)
{
        u8 resbuf[5] ,i ;
        RS485_Receive_Data(resbuf);
        for(i=0;i<5;i++)
        {
        printf("res:%d\r\n",resbuf);
          if(resbuf=='1')
         {        
          BEEP=1;
       delay_ms(5000);
       BEEP=0;
         }
  }
}

主循环一直运行BEEP_485();   发送端以字符串的形式每次发送5个1;

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-4-30
在线时间
6 小时
 楼主| 发表于 2016-8-20 11:23:29 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表