打印
[STM32F1]

关于GD32F103C8T6的一个奇怪问题

[复制链接]
587|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 STM32F89C51 于 2024-3-31 15:14 编辑

芯片是GD32F103C8T6, 用的STM32的标准固件库函数, 遇到一个奇怪的问题: 先贴出代码
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "NVIC.h"
void GPIOB_init(){

        // 初始化GPIO端口和引脚  
    GPIO_InitTypeDef GPIO_InitStructure;  

    // 开启GPIOB时钟  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  

    // 配置GPIOB的PB2引脚为推挽输出,输出速率为50MHz  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOB, &GPIO_InitStructure);  
        
         /// 配置PB1为输入后就无法控制PB2写1或写0,
//          GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1; //  选择端口号PB1            
//    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
//                GPIO_Init(GPIOB,&GPIO_InitStructure);               



}
int main (void){//主程序
          RCC_Configuration(); //时钟设置
                GPIOB_init();
        while(1){

         // 切换PB2引脚的状态  
        GPIO_SetBits(GPIOB, GPIO_Pin_2); // PB2输出高电平  
        delay_ms(1000);
        GPIO_ResetBits(GPIOB, GPIO_Pin_2); // PB2输出低电平  
        delay_ms(1000);

        }
}


如注释所说,为什么配置PB1为输入后就不能控制PB2的高低,万用表测PB2的电平一直为0;注释掉PB1的配置函数,程序正常。。。。。换新的芯片一样的问题,手头上没有ST的芯片。不然可以试试ST的。


-----------------------------我是分割线------------------------------
后面买了一片STM32的,换上去后问题消失

使用特权

评论回复
沙发
shenxiaolin| | 2024-3-28 16:25 | 只看该作者
有没有可能你的这个Delay 函数有问题?因为没有初始化systic的话会导致Hall函数的delay一直循环等待的情况。可以仿真一下。

使用特权

评论回复
板凳
理想阳| | 2024-3-28 16:30 | 只看该作者
这种情况大概率是芯片兼容性的问题。驱动引脚这么简单的事。

使用特权

评论回复
地板
zeshoufx| | 2024-3-28 16:31 | 只看该作者
程序好像没看出什么问题

使用特权

评论回复
5
digit0| | 2024-3-28 16:56 | 只看该作者
设置的是开漏还是推挽输出?

使用特权

评论回复
6
sfd123| | 2024-3-28 19:52 | 只看该作者
GD使用ST标准库  我也遇到 奇奇怪怪的问题

使用特权

评论回复
7
sfd123| | 2024-3-28 19:52 | 只看该作者
GD使用ST标准库  我也遇到 奇奇怪怪的问题

使用特权

评论回复
8
zwsam| | 2024-3-28 22:15 | 只看该作者
good

使用特权

评论回复
9
WoodData| | 2024-3-28 22:46 | 只看该作者
DEBUG调试一下,看看GPIOB寄存器

使用特权

评论回复
10
lxs0026| | 2024-3-28 23:13 | 只看该作者
在一些芯片中,特别是一些设计上,GPIO 引脚之间可能存在电气连接或影响。如果你的 GPIO_Pin_1 输入配置存在问题,可能会影响到相邻的 GPIO_Pin_2 的输出。

使用特权

评论回复
11
lxs0026| | 2024-3-28 23:14 | 只看该作者
试试更换同型号其他芯片试试,如果在更换了同样型号的芯片后问题仍然存在,那么可能是芯片本身的硬件问题。

使用特权

评论回复
12
lxs0026| | 2024-3-28 23:14 | 只看该作者
如果在代码中添加了对 GPIO_Pin_1 的输入配置,而且在这种情况下 GPIO_Pin_2 的电平一直为低,即使在代码中尝试将其设置为高电平,这可能是由于硬件上的问题引起的

使用特权

评论回复
13
一叶倾城wwq| | 2024-3-29 09:30 | 只看该作者
你这个库旧了吧,同款芯片,直接用cube配置的,都用了好几个项目了,没遇到这么简单的IO输出问题

使用特权

评论回复
14
丙丁先生| | 2024-3-29 09:37 | 只看该作者
这段代码是用于初始化STM32F10x微控制器的GPIOB端口,并在主循环中切换PB2引脚的状态。首先,它包含了一些必要的头文件,如"stm32f10x.h"、"sys.h"、"delay.h"和"NVIC.h"。然后,定义了一个名为GPIOB_init的函数,用于初始化GPIOB端口和引脚。在这个函数中,首先启用了GPIOB时钟,然后配置了PB2引脚为推挽输出,输出速率为50MHz。接下来,在主程序中,调用了RCC_Configuration()函数进行时钟设置,然后调用GPIOB_init()函数进行GPIOB端口的初始化。最后,在主循环中,通过GPIO_SetBits和GPIO_ResetBits函数切换PB2引脚的状态,使其输出高电平和低电平,并使用delay_ms函数添加延时。

使用特权

评论回复
15
丙丁先生| | 2024-3-29 09:40 | 只看该作者
当配置 PB1 为输入后无法控制 PB2 的高低电平可能是由硬件设计问题、固件错误以及电气特性等因素导致的。为了解决这个问题,您可以检查硬件设计、审查固件代码、了解电气特性并寻求专业帮助。

使用特权

评论回复
16
丙丁先生| | 2024-3-29 09:40 | 只看该作者
当配置 PB1 为输入后无法控制 PB2 的高低电平可能是由硬件设计问题、固件错误以及电气特性等因素导致的。为了解决这个问题,您可以检查硬件设计、审查固件代码、了解电气特性并寻求专业帮助。

使用特权

评论回复
17
STM32F89C51|  楼主 | 2024-3-30 14:52 | 只看该作者
digit0 发表于 2024-3-28 16:56
设置的是开漏还是推挽输出?

推挽哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝