打印

[F103] GPS接收数据的端口改了,怎么收不到数据

[复制链接]
498|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
过期账户|  楼主 | 2020-4-10 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位,我把GPS模块例程的端口PA2,PA3改成PB10,PB11,然后在gps.config.h里改了相应的配置,但为什么就是读不出数据呢?程序是执行到数据接收半完成标志位处就不行了,不知道是哪里有问题难道还有对应没改的地方吗?使用的是官方GPS_LCD例程,DMA产生中断,调试通过USART1输出数据,USART2对应原GPS数据接收.
求教求教!!
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------

gps_config.h

/* GPS接口配置 使用不同的串口时,要修改对应的接口 */

#define GPS_DR_Base            (USART3_BASE+0x04)                  // 串口的数据寄存器地址.原为USART2


#define GPS_DATA_ADDR             GPS_DR_Base        //GPS使用的串口的数据寄存器地址
#define GPS_RBUFF_SIZE            512                   //串口接收缓冲区大小
#define HALF_GPS_RBUFF_SIZE       (GPS_RBUFF_SIZE/2)    //串口接收缓冲区一半  

/* 外设 */
/*******************************************************/
//GPS串口波特率
#define GPS_USART_BAUDRATE                    9600

#define GPS_USART                             USART3                        //原为USART2
#define GPS_USART_CLK                         RCC_APB1Periph_USART3
#define GPS_RCC_PeriphClockCmd_Fun          RCC_APB1PeriphClockCmd//原为1

#define GPS_USART_RX_GPIO_PORT                GPIOB                                        //原为GPIOA
#define GPS_USART_RX_GPIO_CLK                 RCC_APB2Periph_GPIOB        //原为RCC_APB2Periph_GPIOA
#define GPS_USART_RX_PIN                      GPIO_Pin_11                //原为A3


#define GPS_USART_TX_GPIO_PORT                GPIOB                                        //原为GPIOA
#define GPS_USART_TX_GPIO_CLK                 RCC_APB2Periph_GPIOB        //原为RCC_APB2Periph_GPIOA
#define GPS_USART_TX_PIN                      GPIO_Pin_10                //原为A2
/************************************************************/
#define GPS_DMA                      DMA1
#define GPS_DMA_CLK                  RCC_AHBPeriph_DMA1
#define GPS_DMA_CHANNEL              DMA1_Channel6
#define GPS_DMA_IRQn                 DMA1_Channel6_IRQn         //GPS中断源
//USART1_IRQn


/* 外设标志 */
#define GPS_DMA_FLAG_TC              DMA1_FLAG_TC6
#define GPS_DMA_FLAG_TE              DMA1_FLAG_TE6
#define GPS_DMA_FLAG_HT              DMA1_FLAG_HT6
#define GPS_DMA_FLAG_GL              DMA1_FLAG_GL6
#define GPS_DMA_IT_HT                DMA1_IT_HT6
#define GPS_DMA_IT_TC                DMA1_IT_TC6


/* 中断函数 */
#define GPS_DMA_IRQHANDLER           DMA1_Channel6_IRQHandler   //GPS使用的DMA中断服务函数


extern uint8_t gps_rbuff[GPS_RBUFF_SIZE];
extern __IO uint8_t GPS_TransferEnd ;
extern __IO uint8_t GPS_HalfTransferEnd;

void GPS_ProcessDMAIRQ(void);
void GPS_Config(void);

void trace(const char *str, int str_size);
void error(const char *str, int str_size);
void gps_info(const char *str, int str_size);
void GMTconvert(nmeaTIME *SourceTime, nmeaTIME *ConvertTime, uint8_t GMT,uint8_t AREA) ;

---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
bsp_usart.h
/**
  * 串口宏定义,不同的串口挂载的总线和IO不一样,移植时需要修改这几个宏
        * 1-修改总线时钟的宏,uart1挂载到apb2总线,其他uart挂载到apb1总线
        * 2-修改GPIO的宏
  */
        
// 串口1-USART1
#define  DEBUG_USARTx                   USART1
#define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
#define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
#define  DEBUG_USART_BAUDRATE           115200

// USART GPIO 引脚宏定义
#define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
#define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd

#define  DEBUG_USART_TX_GPIO_PORT         GPIOA   
#define  DEBUG_USART_TX_GPIO_PIN          GPIO_Pin_9
#define  DEBUG_USART_RX_GPIO_PORT       GPIOA
#define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10

#define  DEBUG_USART_IRQ                USART1_IRQn
#define  DEBUG_USART_IRQHandler         USART1_IRQHandler




---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------

测试程序
    /* 初始化GPS数据结构 */
    nmea_zero_INFO(&info);
    nmea_parser_init(&parser);

    while(1)
    {
      if(GPS_HalfTransferEnd)     /* 接收到GPS_RBUFF_SIZE一半的数据 */          //没有接收到数据!!!!!!!GPS_HalfTransferEnd未置1
      {      
        /* 进行nmea格式解码 */
        nmea_parse(&parser, (const char*)&gps_rbuff[0], HALF_GPS_RBUFF_SIZE, &info);
        GPS_HalfTransferEnd = 0;   //清空标志位
        new_parse = 1;      
          //设置解码消息标志
      }
      else if(GPS_TransferEnd)    /* 接收到另一半数据 */
      {

        nmea_parse(&parser, (const char*)&gps_rbuff[HALF_GPS_RBUFF_SIZE], HALF_GPS_RBUFF_SIZE, &info);

        GPS_TransferEnd = 0;
        new_parse =1;
      }
                        
     if( new_parse )                //有新的解码消息   
//     if(1 )   
      {                               ILI9341_DispStringLine_EN(LINE(4),"  hereeeeeeeeeeeeeeeeeeee");

        /* 对解码后的时间进行转换,转换成北京时间 */
        GMTconvert(&info.utc,&beiJingTime,8,1);
        
        /* 输出解码得到的信息 */
                                printf("\r\n时间%d-%02d-%02d,%d:%d:%d\r\n", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day,beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
                        
                                //info.lat lon中的格式为[degree][min].[sec/60],使用以下函数转换成[degree].[degree]格式
                                deg_lat = nmea_ndeg2degree(info.lat);
                                deg_lon = nmea_ndeg2degree(info.lon);

                                
                                double R_Lat, R_Lon, DD_deg_lat, DD_deg_lon;
                                R_Lat=31.844859;  R_Lon=117.295568;                                                                        //基站准确经纬度,待获取

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝