野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11909|回复: 1

STM32485通讯初步导通,有点小问题

[复制链接]
发表于 2016-5-13 19:06:04 | 显示全部楼层 |阅读模式
本来返回的数据应该是十六进制数01 20 02 00 00 B3 C0,但实际返回的是 01 20 02 00 FE 32 01,开发板通过485口发送命令给传感器,传回来的数据通过串口1打印到电脑上,相应代码如下
485配置函数
void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

        //ÅäÖÃÖD¶ÏÔ′
        NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
void USART2_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       

        /* config USART2 clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(mac485REDE_GPIO_CLK, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

       
        /* USART2 GPIO config */
   /* Configure USART2 Tx (PA.02) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
            
  /* Configure USART2 Rx (PA.03) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

        // 485 ½óêÕ·¢Ëíê1Äü GPIO
  GPIO_InitStructure.GPIO_Pin = mac485REDE_PIN ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(mac485REDE_PORT, &GPIO_InitStructure);
          
        /* USART2 mode config */
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_9b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_Even ;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(USART2, &USART_InitStructure);
       
        //USART_ITConfig(USART2,USART_IT_TXE,ENABLE);//ÔêDí′®¿ú2·¢ËíÖD¶Ï
        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//ÔêDí′®¿ú2½óêÕÖD¶Ï
  USART_Cmd(USART2, ENABLE);
        USART_ClearFlag(USART2,USART_FLAG_TC);
}


接受中断函数
static void delay_ms(u16 time)
{
        u16 i=0;
        while(time--)
        {
                i=12000;
                while(i--){}
        }
}
int iup;
void USART2_IRQHandler(void)
{
        extern uint8_t che[7];
        uint8_t ch;

//        for(i=0;i<8;i++)
//        {
        if(USART_GetITStatus(USART2, USART_IT_RXNE)==SET)
          {        
            //ch = USART1->DR;
                        ch = USART_ReceiveData(USART2);
                        USART_ClearFlag(USART2,USART_FLAG_RXNE);
        //GPIO_SetBits(mac485REDE_PORT,mac485REDE_PIN);
                        delay_ms(1);
                  //printf( "%02X", ch );    //&#189;&#171;&#189;óêüμ&#189;μ&#196;êy&#190;Y&#214;±&#189;ó·μ&#187;&#216;′òó&#161;
          }
                che[iup]=ch;
                iup++;
//}

}



主函数
#include "stm32f10x.h"
#include "bsp_usart2_485.h"
#include "bsp_usart1.h"
#include <stdio.h>
/*
* oˉêy&#195;&#251;£omain
* &#195;èê&#246;  £o&#214;÷oˉêy
* ê&#228;è&#235;  £o&#206;T
* ê&#228;3&#246;  £o&#206;T
±&#190;1¤3ì&#206;a&#214;÷&#187;ú£&#172;êμ&#209;éê±&#207;è&#184;&#248;′ó&#187;úé&#207;μ&#231;
*/

  uint8_t send_AHRSO[6]={0x01,0x20,0x00,0x39,0xC0,0xC0};
        uint8_t che[7];
        uint8_t ch;
        extern int iup;
        uint8_t temp;
        uint16_t RXD_Data;
                        u8 RS485_RX_BUF[8];
                u8 RS485_RX_CNT;
         static void delay_ms(u16 time)
{
        u16 i=0;
        while(time--)
        {
                i=12000;
                while(i--){}
        }
}


        void USART_PutHEX(USART_TypeDef* USARTx,uint8_t Data)
{
         USART_SendData(USARTx, Data);
   while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
}



         
        int SendUrt()
        {
           GPIO_SetBits(mac485REDE_PORT,mac485REDE_PIN);
                delay_ms(1);
     USART_PutHEX(USART2,send_AHRSO[0]);

                 USART_PutHEX(USART2,send_AHRSO[1]);

                 USART_PutHEX(USART2,send_AHRSO[2]);
       
                 USART_PutHEX(USART2,send_AHRSO[3]);
       
                 USART_PutHEX(USART2,send_AHRSO[4]);
                 USART_PutHEX(USART2,send_AHRSO[5]);
       
        }
       


int main(void)
{
   temp = 0;  
         ch=0;
   iup=0;

  /* USART2 config */
  USART2_Config();  //′&#174;&#191;ú2ó&#195;óúê&#213;·¢485μ&#196;êy&#190;Y
        NVIC_Configuration();
  USARTx_Config();  //′&#174;&#191;ú1ó&#195;óúê&#228;3&#246;μ÷ê&#212;D&#197;&#207;¢


                while(1)
         {
                                GPIO_SetBits(mac485REDE_PORT,mac485REDE_PIN);                //&#189;&#248;è&#235;·¢&#203;í&#196;£ê&#189;
                                 delay_ms(1);
                                SendUrt();//·¢&#203;íêy&#190;Y
                 
                                //delay_ms(1000);
                                while (USART_GetFlagStatus(USART2,USART_FLAG_TC) !=SET);//&#194;&#214;&#209;ˉ&#214;±μ&#189;·¢&#203;íêy&#190;Yíê±&#207;       
                 GPIO_ResetBits(mac485REDE_PORT,mac485REDE_PIN);//&#189;&#248;è&#235;&#189;óêü&#196;£ê&#189;
                         //printf("\r\n·¢&#203;íêy&#190;Y3é1|£&#161;\r\n"); //ê1ó&#195;′&#174;&#191;ú1′òó&#161;μ÷ê&#212;D&#197;&#207;¢μ&#189;&#214;&#213;&#182;&#203;
                 delay_ms(10);
               
                                if(iup>7)
                                {
                                        iup=0;
                                        printf("%02X %02X %02X %02X %02X %02X %02X 02X\n",che[0],che[1],che[2],che[3],che[4],che[5],che[6]);
                                       
                                }

                                delay_ms(100);               
         }
}



回复

使用道具 举报

发表于 2016-5-14 09:13:04 | 显示全部楼层
换一个串口调试助手看看,我们旧版的串口调试助手有问题的 1.0、1.1版本才正常
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 18:22 , Processed in 0.039673 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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