完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32F767 HAL库 裸机跑没有问题。 加入NANO 3.15 后 ,进入错误中断不做处理也会进入到硬件中断中 msh中提示的报警信息 debug中无法调试,进入错误回调后单步运行都只会在几个汇编命令之间跳转 psr: 0x01000036 r00: 0x00000003 r01: 0x20009838 r02: 0x00000183 r03: 0x00000000 r04: 0x0800046d r05: 0x08017380 r06: 0x0801761d r07: 0xdeadbeef r08: 0xdeadbeef r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x00000000 lr: 0x0800062b pc: 0x080006e4 hard fault on handler debug event 错误处 汇编地址代码:0x080006e4 0x080006E4 BEAB BKPT 0xAB 0x080006E6 BD08 POP {r3,pc} 0x080006E8 4901 LDR r1,[pc,#4] ; @0x080006F0 0x080006EA 2018 MOVS r0,#0x18 0x080006EC BEAB BKPT 0xAB 0x080006EE E7FE B 0x080006EE 0x080006F0 0026 DCW 0x0026 0x080006F2 0002 DCW 0x0002 0x080006F4 4800 LDR r0,[pc,#0] ; @0x080006F8 0x080006F6 4770 BX lr 0x080006F8 0070 DCW 0x0070 0x080006FA 2000 DCW 0x2000 0x080006FC 4800 LDR r0,[pc,#0] ; @0x08000700 0x080006FE 4770 BX lr 0x08000700 0070 DCW 0x0070 0x08000702 2000 DCW 0x2000 0x08000704 B510 PUSH {r4,lr} 0x08000706 F000F85F BL.W 0x080007C8 __rt_SIGABRT_inner 0x0800070A E8BD4010 POP {r4,lr} 0x0800070E F000B856 B.W 0x080007BE __sig_exit __aeabi_memclr4: 请问有办法处理错误回调函数吗 这是HAL库的处理问题,还是NANO中要怎么操作进行处理。 我是想串口错误后发出灯闪烁报警。 如下串口错误回调函数代码 void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { /* Prevent unused argument(s) compilation warning */ UNUSED(huart); /* NOTE : This function should not be modified, when the callback is the HAL_UART_ErrorCallback can be implemented in the user file. 不要在回调函数中重启,若一直发送错误波特率进入函数会卡死,导致看门狗复位 */ // if((huart->ErrorCode & HAL_UART_ERROR_ORE) != 0U) // if((huart->ErrorCode & HAL_UART_ERROR_FE) != 0U) // if((huart->ErrorCode & HAL_UART_ERROR_NE) != 0U) if(huart == &huart1) { uart1_error.ErrorCode = huart->ErrorCode; uart1_error.Flag = 1; // SERIAL1_SET;//mb发送串口1异常 } if(huart == &huart2) { uart2_error.ErrorCode = huart->ErrorCode; uart2_error.Flag = 1; // SERIAL2_SET;//mb发送串口2异常 } Use_Led_Setmode(2); //两闪两灭 提示串口挂掉 } |
|
相关推荐
3个回答
|
|
会不会是有什么没处理导致的,或者那个中断里面有问题导致的,可以根据那个地址,去.map文件中查看一下是哪个地方异常了,或者断点调试一下。
|
|
|
|
找了一下,发现是一直进入BKPT 0xAB
网上查了一下是printf用法有问题,添加了 /* ------------------通过重定向将printf函数映射到串口1上-------------------*/ #if !defined(__MICROLIB) //#pragma import(__use_no_semihosting) __asm (".global __use_no_semihostingnt"); void _sys_exit(int x) //避免使用半主机模式 { x = x; } //__use_no_semihosting was requested, but _ttywrch was void _ttywrch(int ch) { ch = ch; } struct __FILE { int handle; }; FILE __stdout; #endif #if defined ( __GNUC__ ) && !defined (__clang__) #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif //PUTCHAR_PROTOTYPE //{ // /* 实现串口发送一个字节数据的函数 */ // //serial_write(&serial1, (uint8_t)ch); //发送一个自己的数据到串口 // HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000); // return ch; //} 然后再编译运行,进入串口错误中断后的错误不一样了。 psr: 0x21000236 r00: 0x53203d3d r01: 0x525f4554 r02: 0x53203d3d r03: 0x525f4554 r04: 0x53203d3d r05: 0x53203d3d r06: 0x0800c4c7 r07: 0x20005914 r08: 0x2000a260 r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x0800583b lr: 0x08000467 pc: 0x08000498 hard fault on handler bus fault: SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:525F4554 map文件应该是这两个函数 __assert 0x08000411 Thumb Code 0 assert.o(.text) strstr 0x08000491 Thumb Code 36 strstr.o(.text) 汇编代码 0x080004B4 B510 PUSH {r4,lr} 0x08000498 F8134B01 LDRB r4,[r3],#0x01 |
|
|
|
注释用到strstr的函数,再运行。
错误的函数在这里,我没有用到这个strlen函数。 搜索了一下,都是finsh的文件再使用的 __assert 0x08000411 Thumb Code 0 assert.o(.text) strlen 0x08000491 Thumb Code 62 strlen.o(.text) strncmp 0x080004cf Thumb Code 150 strncmp |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
786 浏览 0 评论
4210 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2520 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2926 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31442 浏览 11 评论
72894 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:44 , Processed in 0.503369 second(s), Total 43, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号