搜索
bottom↓
回复: 0

写flash后串口接收失效,该如何修改?

[复制链接]

出0入36汤圆

发表于 2023-8-15 18:33:19 | 显示全部楼层 |阅读模式
     用的是PY32,但是我看HAL库函数和ST基本一致,看规格书寄存器也一致。

现象:
    初始串口收发正常,只要有写flash动作(当eeporm用),就会将CR1的 PEIE RXNEIE 及 CR3的EIE 3个中断清0,这样后续串口就无法接收数据了。
怀疑写flash时,flash中代码不能被执行而USART1是外设依然在运行。 就会出现OVE等错误。在 void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) 函数中
当有错误产生时将会调用UART_EndRxTransfer(huart); 清除上面的3个中断使能,从而后续无法进入中断接收。

尝试解决:
    1) 添加错误回调函数重新打开上述3个中断
                    void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
                {
                    printf("Uart Error, ErrorCode = %d\r\n", huart->ErrorCode);
                    if (huart->Instance == USART1)
                        {
                            uint32_t isrflags   = READ_REG(huart->Instance->SR);
                        uint32_t cr1its     = READ_REG(huart->Instance->CR1);
                        uint32_t cr3its     = READ_REG(huart->Instance->CR3);
                        //do{
                        //isrflags   = READ_REG(huart->Instance->SR);
                        //cr1its     = READ_REG(huart->Instance->CR1);
                        //cr3its     = READ_REG(huart->Instance->CR3);
                        //}while(isrflags & 0x0000003f);
                            HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, 1);
                        }
                }
       调试,故障依旧。
    2)写完flash后对USART1寄存器重新赋值,相当于重新初始化。 调试,故障依旧。
    3)在写flash前   USART1->CR1 &= (uint16_t)(~USART_CR1_UE);  写完后恢复 USART1->CR1 |=(uint16_t)(~USART_CR1_UE);
    调试,故障依旧。

    到这个步骤还是认为是写flash导致CR1的 PEIE RXNEIE 及 CR3的EIE 3个中断清0,虽然用代码重新置位了,可能有潜伏的错误接下来又清除了。

    4)直接将void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) 中的UART_EndRxTransfer(huart); 注释掉,看起来是没有哪里会执行
    对CR1的 PEIE RXNEIE 及 CR3的EIE 3个中断清0了。 调试故障依旧

    郁闷头大中 ,没弄明白还有什么情况会对中断使能清0.  有意思的是在keil调试窗口当出现异常时,在USART1观察窗口里直接将PEIE RXNEIE 及 EIE打勾
观察窗口会自动修改几次,就是一会0一会1,像led闪烁那样闪几下,最后显示打勾接收正常。



回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 09:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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