stm32开发遇到的问题及后续

STM32开发问题记录

HAL库开发,问题罗列以及后续排查简单记录(仅适用于个人)


一、uart

1.1 问题:

打印正常,但是加入接收中断后,开始出bug,最后锁定接收中断挂掉了(备注


原因: HAL库的串口接收发送函数有bug,就是收发同时进行的时候,会出现锁死的现象;原因在于进入接收中断后__HAL_LOCK(huart)发现UART资源已经被锁,随即返回HAL_BUSY,不再执行HAL_UART_Receive_IT中的打开接收中断代码,所以uart再无法接收数据。而锁住该UART的正是发送函数中的__HAL_LOCK(huart)。
解决: 需要注释掉 HAL_UART_Receive_IT 和 HAL_UART_Transmit_IT 中的 __HAL_LOCK(huart) 函数。或者不要在接收里面,每接收到一个字符就printf一下。

1.2 问题:

在接收中断中使用HAL_UART_Receive_IT()函数,会导致CR1的RXNEIE 置0,最后一直处于错误状态,无法进行接收。


解决: 注释掉 HAL_UART_Receive_IT 中的 HAL_LOCK(huart) 函数

1.3 问题:串口接收一个字节之后就不会再进入中断了;


原因:我是单字符接收就会触发中断,需要在接收回调函数里重新开启中断接收。(HAL库在触发中断时会有一个取出的操作且中断清零,因此回调函数需要再次开启中断继续接收后面没取完的字符)
解决:在HAL_UART_RxCpltCallback(UART_HandleTypeDef huart)函数中调用HAL_UART_Receive_IT*(&huart1, &RxBuffer, 1);再次开启中断接收;

二、freertos+fatfs+sdio

2.1 问题:

没有加freertos时候,sd卡读写正常;加上freertos时候,mout成功,但read等其他操作返回错误3 not ready


解决: sdio和sddma的中断优先级要小于freertos的最小优先级

2.2 问题:串口接受数据异常

串口以DMA方式接受数据;但是收不到数据;


==解决:== 串口接收数据的任务优先级低于主任务,故经常被打断;接受数据异常;

三、SPI

3.1 烧录flash工装,烧录结束之后,芯片无法自启;


解决:问题出在烧录结束之后工装的GPIO引脚配置不合理;烧录时配置的是推挽输出和上拉输入;烧录结束后依然是这种状态就会导致被写模块重启时cpu无法控制flashx芯片的引脚(已经被工装控制了);需要配置为高阻态(浮空输入);

3.2 烧录flash容易失败;


原因: 用示波器查看spi上mosi、miso的波形呈现尖峰状,且上下拉时间偏长导致寄存器保存的数据失真;
解决: 降低阻抗;降低rc常数,不好控制C的值,可以增大R的值,从330Ω电阻换成1kΩ电阻;


欢迎指正
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值