完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用cube库接收GPS数据容易死机 ??? 同样的gps接收程序,使用标准库接收时完全没有任何问题的。 程序如下: void MX_USART2_UART_Init(void) { huart2_gps.Instance = USART2; huart2_gps.Init.BaudRate = 9600; // 591 的GPS 模块的波特率是 9600 huart2_gps.Init.WordLength = UART_WORDLENGTH_8B; huart2_gps.Init.StopBits = UART_STOPBITS_1; huart2_gps.Init.Parity = UART_PARITY_NONE; huart2_gps.Init.Mode = UART_MODE_RX; // 单片机的 USART2 TX 引脚作为普通的引脚使用 huart2_gps.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2_gps.Init.OverSampling = UART_OVERSAMPLING_16; // huart1.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED; // usart2 使用 // huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; // usart2 使用 HAL_UART_Init(&huart2_gps); GPS_PowerInit(); if(HAL_UART_Receive_IT(&huart2_gps, &gps.Buff, 1) != HAL_OK) // 启动一次接收中断 { printf("rnUART2 Receive Init IT Error"); } } #define NEMA_NUM_MAX 6 //缓冲的NEMA语句数量 #define NEMA_CHAR_MAX 120 //缓冲的NEMA语句字符数量 struct { u8 isupdated; //NEMA 缓冲区更新标志 char buffer[NEMA_CHAR_MAX]; //NEMA 缓冲区 }GPS_NEMA[NEMA_NUM_MAX] ; /* ***************************************************************************** * 在usart 中断 中调用 ***************************************************************************** */ void GPS_UsartRx(u8 buffer) { static u8 NEMA_count = 0; static u8 char_count = 0; if(buffer == '$') { GPS_NEMA[NEMA_count].isupdated = 1; //将上面一条语句打上更新标志 NEMA_count++; if(NEMA_count > (NEMA_NUM_MAX-1)) { NEMA_count = 0; } GPS_NEMA[NEMA_count].isupdated = 0; //将本条语句打上未更新标志, 指向结构体里面的下一个变量 GPS_NEMA[NEMA_count].buffer[0] = '$'; char_count = 1; } else { if(char_count < NEMA_CHAR_MAX-1) GPS_NEMA[NEMA_count].buffer[char_count++] = buffer; } } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART2) // GPS 接收使用 { GPS_UsartRx( gps.Buff ); HAL_UART_Receive_IT(&huart2_gps, &gps.Buff, 1); // 不知道是不是此处的开关动作太频繁造成的 ???????????????????? // if(gps.Buff == '$') // 测试使用 // printf("rn"); // printf("%s", (char *) & gps.Buff); } } //串口接收中断函数 void USART2_IRQHandler(void) { // 标准库 // if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) // 接收中断有效 ; // { // USART_ClearITPendingBit(USART2, USART_IT_RXNE); // 清除USART1的接收中断 // //gp***uff = (uint16_t)((USART2->DR) & (uint16_t)0x01FF); // gp***uff = USART_ReceiveData(USART2); // 返回USARTx最近接收到的数据 ; // GPS_UsartRx(gp***uff); // } HAL_UART_IRQHandler( & huart2_gps); } |
|
相关推荐
9个回答
|
|
没有这回事吧。有问题,发上来看看。。
|
|
|
|
估计是你程序的问题
|
|
|
|
你好,昨天发帖时,代码死活发不上去,今天刚刚把代码补上去了,你看看是什么情况 ? |
|
|
|
目前我也搞不清哟,但是gps接收部分以前是使用在标准库里面的,完全木有任何问题,目前想使用在这个cube的库上,结果却不行了 |
|
|
|
终于自己搞定了
|
|
|
|
自己终于搞定了
|
|
|
|
终于搞定了,原来是gps解析的问题
|
|
|
|
已经解决了,是gps 解析程序问题造成的
|
|
|
|
不错,很好的经验分享,辛苦麻烦了,欠缺这方面的资料,非常感谢。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2201 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2027 浏览 3 评论
4633 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2171 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2705 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 23:32 , Processed in 1.183988 second(s), Total 88, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号