关于GD32引脚PA13、PA15、PB3、PB4配置为普通引脚的问题

news2024/9/29 21:29:24

关于GD32引脚PA13、PA15、PB3、PB4配置为普通引脚的问题

在实际开发中,经常会遇到引脚资源受限需要将一些具有特定功能的引脚配置为普通引脚或其他引脚功能使用的情况。

博主之前遇到过类似的情况,都正常解决了。但偶尔也会出现在配置引脚时少了一些配置,结果导致代码运行时偶尔出现问题,最终排查出了是引脚配置问题,因此特地记录下来,供有需求的同学参考。

以GD32F307为例,在使用外置sram芯片时,使用了PB3、PB4作为SPI通讯的SCK和MISO引脚。
在代码编写和调试时,忽视了PB3和PB4的默认功能是JTDO和NJTRST功能,直接将PB3、PB4当做普通SPI引脚使用,由于我调试时一致使用JLINK连接芯片进行在线调试,在这个时候sram芯片的驱动一直正常,读写数据也正常,也导致我再一开始没有发现这个问题。

后来交给测试人员测试功能时,反馈有时候出现数据丢失的情况。博主排查后发现是sram读写数据失败导致,用示波器排查波形发现在在读写sram时,SCK没有时钟信号发出。博主很奇怪,为何之前调试时没有出现过这种情况?于是乎,连接上JILNK在线调试,用示波器一看,果然,此时sram读写数据都是SCK线上是有正常时钟发出的。。。

在这种情况下,排查了数据手册(datasheet)上SPI相关的引脚,结果发现了问题的根本所在:PB3引脚默认功能为JTDO,PB4引脚默认功能是NJTRST,他们是JTAG调试方式时用的,博主使用的是SWD的方式,且这两个引脚要配置为SPI功能需要做重定向处理,即将关闭这两个引脚JTAG相关功能,这样配置之后,测试发现一切正常了。
在这里插入图片描述

#define GPIO_SWJ_NONJTRST_REMAP          ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(1) >> 16))                /*!< full SWJ(JTAG-DP + SW-DP),but without NJTRST */
#define GPIO_SWJ_SWDPENABLE_REMAP        ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(2) >> 16))                /*!< JTAG-DP disabled and SW-DP enabled */
#define GPIO_SWJ_DISABLE_REMAP           ((uint32_t)0x00300000U | (PCF0_SWJ_CFG(4) >> 16))                /*!< JTAG-DP disabled and SW-DP disabled */
#define GPIO_SPI2_REMAP                  ((uint32_t)0x00200000U | (AFIO_PCF0_SPI2_REMAP >> 16))           /*!< SPI2 remapping*/

代码如下:

/**
 * @brief    sram spi配置
 * @param    None
 * @retval   None
 */
void sram_spi_init(void)
{
    spi_parameter_struct spi_init_struct;

    rcu_periph_clock_enable(RCU_GPIOB);
    rcu_periph_clock_enable(RCU_GPIOE);
    rcu_periph_clock_enable(RCU_SPI2);

    /* SPI2_SCK: PB3
     * SPI2_MISO:PB4
     * SPI2_MOSI:PB5
     * SPI2_CS:  PE1
     * HOLD:     PE0
     */
    gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);/*PB3、PB4默认为JTAG引脚,使用SPI需失能JTAG功能,否则会导致SPI引脚功能异常,如:不DEBUG时SCK不产生时钟*/
    
    gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_5);//MISO引脚可配置为推挽输出、浮空输入、上拉输入皆可
    gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);

    gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);//此处硬件改线占用了板子DI引脚,后续硬件版本会有改动
    gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);/*HOLD引脚设置为1禁用该功能*/
    
    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
    spi_init_struct.device_mode          = SPI_MASTER;
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;//重要!重要!重要!该SRAM芯片需要配置为时钟空闲时为低电平,在第一个跳变沿采样
    spi_init_struct.nss                  = SPI_NSS_SOFT;//默认为软件NSS
    spi_init_struct.prescale             = SPI_PSC_8;//注意SPI芯片支持的最高速率
    spi_init_struct.endian               = SPI_ENDIAN_MSB;
    spi_init(SPI2, &spi_init_struct);

    SPI_SRAM_CS_HIGH();//初始拉高CS
    SPI_SRAM_HOLD_HIGH();//HOLD默认为高,禁用该功能,否则可能导致读写失败
    
    spi_enable(SPI2);
}

因此,在使用到引脚PA13、PA15、PB3、PB4等比较特殊的引脚时,一定仔细查看下手册上的定义再进行配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言基础学习教程(一)导学部分

Go语言基础 将在工作中学习的东西整理出来作为一个简单的Go语言基础教程 Go语言 Go语言(Golang)是Google公司2009年推出的一门"高级编程言语", 目的是为了解决: "现有主流编程语言"明显落后于硬件发展速度的问题不能合理利用多核CPU的优势提升软件系统性…

ref与DOM-findDomNode-unmountComponentAtNode知识点及应用例子

​​​​​​http​​​http://t.csdnimg.cn/og3BI 知识点讲解↑ 需求: (下载/导出 用post请求时:) 实例: react部分代码 1、点击下载按钮&#xff0c;需要传给后端数据&#xff0c;到数据扁平&#xff0c;不是那么复杂&#xff0c;只需url地址即可完成下载&#xff0c;后端…

靶场通关记录

目录 一、信息收集-端口扫描 目标开放端口收集 目标端口对应服务探测 信息收集-端口测试 二、 22-SSH弱口令爆破(挂着干别的) 80-HTTP端口的信息收集 三、信息收集-目录访问 漏洞利用-getwebshell 总结 getwebshell → 源码注释发现用户名 → robots.txt发现base64密码 …

mybatisplus接口解析

一、前言 java开发应用程序与数据库交互使用比较多的就是mybatisplus接口。通过mybatisplus接口&#xff0c;我们可以通过程序更好得到对数据库表进行增删查改。 二、mybatisplus Mapper接口源码 /*** Mapper 继承该接口后&#xff0c;无需编写 mapper.xml 文件&#xff0c;即…

1576. 替换所有的问号

1576. 替换所有的问号 C代码&#xff1a;自己写的 char * modifyString(char * s){int n strlen(s);for (int i 0; i < n; i){if (s[i] ?) {if (i ! 0 && i ! n-1) {for (int j 0; j < 26; j) {if (a j ! s[i-1] && a j ! s[i1]) {s[i] a j;br…

SeleniumIDE 自动化用例录制、测试用例结构分析

1、SeleniumIDE用例录制 SeleniumIDE用例录制使用场景 刚开始入门UI自动化测试团队代码基础较差技术成长之后学习价值不高 SeleniumIDE的下载以及安装 官网&#xff1a;https://www.selenium.dev/Chrome插件&#xff1a;https://chrome.google.com/webstore/detail/seleniu…

对音频切分成小音频(机器学习用)

我是把so-vits中小工具&#xff0c;分析源码然后提取出来了。以后可以写在自己的程序里。 -------流程&#xff08;这是我做的流程&#xff0c;你可以不用看&#xff09; 从开源代码中快速获取自己需要的东西 如果有界面f12看他里面的接口&#xff0c;然后在源码中全局搜索&…

英国/法国/意大利/德国/西班牙,电动交通设备合规政策更新!

英国/法国/意大利/德国/西班牙&#xff0c;电动交通设备合规政策更新&#xff01; 产品安全 合规政策更新&#xff01;或加昵称咨询 NOTICE 尊敬的卖家&#xff1a; 您好&#xff01; 我们此次联系您是因为您正在销售需要审批流程的商品。为此&#xff0c;亚马逊正在实施审…

九大装修收纳空间的设计,收藏备用!福州中宅装饰,福州装修

如果房子面积不大&#xff0c;收纳设计就显得非常重要。其实装修房子中很多地方都可以做收纳&#xff0c;九大空间每一处都可以放下你的东西&#xff0c;让你摆脱收纳烦恼。 收纳空间少的话&#xff0c;装修完后住久了怕会乱成一窝&#xff0c;因此装修的时候&#xff0c;收纳…

google hack常用语法介绍

Google hacker (Google黑客)是利用GOOGLE提供的搜索功能查找黑客们想找到的信息.一般是查找网站后台,网管的个人信息,也可以用来查找某人在网络上的活动. Google hacker 一般是做为黑客在入侵时的一个手段.在入侵过程中有时需要查找后台的登陆口就需要用到GOOGLE HACKER.有…

在asp.net中,实现类似安卓界面toast的方法(附更多弹窗样式)

最近在以前的asp.net网页中&#xff0c;每次点击确定都弹窗&#xff0c;然后还要弹窗点击确认&#xff0c;太麻烦了&#xff0c;这次想升级一下&#xff0c;实现类似安卓toast的弹窗提示方式。于是百度了一下&#xff0c;目前看到有两种&#xff0c;sweetalert和toastr。 这里…

Python接口自动化测试实战详解,你想要的全都有

前言 接口自动化测试是当前软件开发中最重要的环节之一&#xff0c;可以提高代码质量、加速开发周期、减少手工测试成本等优点。Python语言在接口自动化测试方面应用广泛&#xff0c;因为它具有简单易学、开发效率高、库丰富等特点。 一、接口自动化测试概述 接口自动化测试…

六个交易日市值蒸发20亿港元,第四范式难逃AI大模型“魔咒”

AI独角兽第四范式终于敲钟了。 北京第四范式智能技术股份有限公司(06682.HK&#xff0c;下称“第四范式”)于9月28日正式挂牌港交所&#xff0c;发行价为55.60港元/股&#xff0c;IPO首日报收58.50港元/股。 上市后6个交易日&#xff0c;截至10月6日港股收盘&#xff0c;第四…

【无监控,不运维!这份监控建设总结太赞了!】

运维行业有句话&#xff1a;“无监控、不运维”&#xff0c;是的&#xff0c;一点也不夸张&#xff0c;监控俗称“第三只眼”。没了监控&#xff0c;什么基础运维&#xff0c;业务运维都是“瞎子”。所以说监控是运维这个职业的根本。 尤其是在现在DevOps这么火的时候&#xf…

【网络安全】网络安全的最后一道防线——“密码”

网络安全的最后一道防线——“密码” 前言超星学习通泄露1.7亿条信息事件武汉市地震监测中心遭境外网络攻击事件 一、密码起源1、 古代密码2、近代密码3、现代密码4、量子密码 二、商密专栏推荐三、如何利用密码保护账号安全&#xff1f;1、账号安全的三大危险&#xff1f;&…

LLaMA Adapter和LLaMA Adapter V2

LLaMA Adapter论文地址&#xff1a; https://arxiv.org/pdf/2303.16199.pdf LLaMA Adapter V2论文地址&#xff1a; https://arxiv.org/pdf/2304.15010.pdf LLaMA Adapter效果展示地址&#xff1a; LLaMA Adapter 双语多模态通用模型 为你写诗 - 知乎 LLaMA Adapter GitH…

PSN 两步验证解除2023.10.9经验贴

背景 本人10月1号收到Sony邮件&#xff0c;说是不规律登录&#xff0c;需修改密码后登录&#xff0c;然后我10月8日登录PS4的时候&#xff0c;提示两步验证。当时就想坏了&#xff0c;然后找B站相关经验贴&#xff0c;10月9号电话香港客服&#xff0c;解除了两步验证&#xff0…

IOT 围炉札记

文章目录 一、蓝牙二、PAN1080三、IOT OS四、通讯 一、蓝牙 树莓派上的蓝牙协议 BlueZ 官网 BlueZ 官方 Linux Bluetooth 栈 oschina 二、PAN1080 pan1080 文档 三、IOT OS Zephyr 官网 Zephyr oschina Zephyr github 第1章 Zephyr简介 第2章 Zephyr 编译环境搭建&#…

云管理平台基本功能有哪些?适配国产化平台吗?

随着云计算的大力发展&#xff0c;越来越多的企业需要云管理平台了。但很多其他对于云管理平台不是很了解&#xff0c;有小伙伴问&#xff0c;云管理平台基本功能有哪些&#xff1f;适配国产化平台吗&#xff1f;这里我们小编就给大家解答一下。 云管理平台基本功能有哪些&am…

【Java】中小学智慧校园管理系统源码 SaaS模式+电子班牌系统

智慧校园电子班牌系统&#xff0c;主要针对中小学校园研发&#xff0c;为校园管理提供智慧管理方案&#xff0c;提供校园智慧管理平台&#xff0c;在大数据平台下&#xff0c;对应用系统进行统一、集中管理&#xff0c;囊括校园管理全方面&#xff0c;实现对校园、班级、教师、…