当前位置: 首页 > article >正文

STM32引脚PB3、PB4、PA15作为输入输出的特殊配置

一、问题描述

   简单描述:

    最近做的一个项目中,PB3端口配置为输入,不管外部输入是高电平还是低电平,一直读取到的是低电平。

调试过程:在撰写代码过程中,又发现新的问题,Enter按键无法控制屏幕数值,反复检查了原理图,以及引脚配置均没有问题,通过万用表也检查了引脚的电压,引脚的电压与理论值3V基本一致。PB3已经拉高了,但是读取的仍为低电平。

二、解决办法

2.1以前的解决方法
    记得以前做过的ECU项目中,有几个GPIO由于是JTAG的调试引脚,输出总是没信号,调试了两天才搞定,当时是配置的时候要打开复用时钟,关闭JTAG功能,然后输出就正常了,截取配置的代码如下:

  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);    //禁止JTAG功能,把PB3,PB4作为普通IO口使用  

2.2根据网上资料总结的解决办法:

PB3作为JDO,被JTAG占用。  一般都只禁用JTAG了,但是在 Asynchronous trace mode(异步跟踪调试模式),PB3还是TRACESWO,TRACESWO if async trace  is enabled  PB3,所以,作为输入还需要禁用async trace,寄存器版的那两句话就是禁用async trace的之后,输入就没问题了。

    在HAL库的__HAL_AFIO_REMAP_SWJ_NOJTAG()之后,增加下面的关闭异步跟踪调试代码:

DBGMCU->CR  &= ~((uint32_t)1<<5);  

这样,void HAL_MspInit(void)完整代码如下:

void HAL_MspInit(void)
{
 
  /* USER CODE BEGIN MspInit 0 */
 
  /* USER CODE END MspInit 0 */
 
  __HAL_RCC_AFIO_CLK_ENABLE();
  __HAL_RCC_PWR_CLK_ENABLE();
 
  /* System interrupt init*/
 
  /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled
  */
  __HAL_AFIO_REMAP_SWJ_NOJTAG();
 
  /* USER CODE BEGIN MspInit 1 */
  DBGMCU->CR  &= ~((uint32_t)1<<5);  // close asynchronous trace mode
//  AFIO->MAPR = (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24); // set PA15、PB3、PB4 as normal GPIO, input and output
  /* USER CODE END MspInit 1 */
}
 

再进行仿真,可以正确的读取到PB3的高低电平了,问题得到了解决,感谢众网友。

    使用标准库的话,代码如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);              
DBGMCU->CR  &= ~((uint32_t)1<<5);   
AFIO->MAPR = (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24); /*  PA15 PB3 PB4 */


http://www.kler.cn/a/325941.html

相关文章:

  • 【服务器组件】如何辨别服务器组件
  • C指针之舞——指针探秘之旅
  • 如何合理设计一套springcloud+springboot项目中的各个微服务模块之间的继承关系的最优方案
  • 深度学习:卷积神经网络的计算复杂度,顺序操作,最大路径长度
  • 15分钟学 Go 第 59 天 :更高级的Go话题——接触微服务
  • 无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • mysql代理服务器
  • 自然语言处理实战项目
  • MinIO使用客户端进行桶和对象的管理
  • OpenCV视频I/O(1)视频采集类VideoCapture介绍
  • Mybatis-Mapper接口方式
  • SpringBoot依赖之Microsoft SQL Server Driver
  • 谈谈Redisson分布式锁的底层实现原理
  • 怎么提取视频里的音频?非常简单的提取音频方法
  • 上下位关系自动检测方法(论文复现)
  • Stargazers Ghost Network在GitHub平台上的隐性威胁
  • 大数据复习知识点4
  • 深度估计任务中的有监督和无监督训练
  • leetcode45:跳跃游戏||
  • 超详细超实用!!!AI编程之cursor编写设计模式开闭原则实例(四)
  • Javase学习day1-前置知识
  • 【Android 源码分析】Activity短暂的一生 -- 目录篇 (持续更新)
  • 记一次教学版内网渗透流程
  • Proteus如何添加数码管
  • [遇到问题] Word中插入公式横线“-”变成了长连字符
  • 匿名管道 Linux