[STM32F1] 关于GD32F103C8T6的一个奇怪问题

[复制链接]
2368|13
 楼主| STM32F89C51 发表于 2024-3-28 11:28 | 显示全部楼层 |阅读模式
本帖最后由 STM32F89C51 于 2024-3-31 15:14 编辑

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

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

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

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



  20. }
  21. int main (void){//主程序
  22.           RCC_Configuration(); //时钟设置
  23.                 GPIOB_init();
  24.         while(1){

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

  30.         }
  31. }


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

-----------------------------我是分割线------------------------------
后面买了一片STM32的,换上去后问题消失
shenxiaolin 发表于 2024-3-28 16:25 | 显示全部楼层
有没有可能你的这个Delay 函数有问题?因为没有初始化systic的话会导致Hall函数的delay一直循环等待的情况。可以仿真一下。
理想阳 发表于 2024-3-28 16:30 | 显示全部楼层
这种情况大概率是芯片兼容性的问题。驱动引脚这么简单的事。
zeshoufx 发表于 2024-3-28 16:31 | 显示全部楼层
程序好像没看出什么问题
digit0 发表于 2024-3-28 16:56 | 显示全部楼层
设置的是开漏还是推挽输出?
sfd123 发表于 2024-3-28 19:52 | 显示全部楼层
GD使用ST标准库  我也遇到 奇奇怪怪的问题
sfd123 发表于 2024-3-28 19:52 | 显示全部楼层
GD使用ST标准库  我也遇到 奇奇怪怪的问题
zwsam 发表于 2024-3-28 22:15 | 显示全部楼层
WoodData 发表于 2024-3-28 22:46 | 显示全部楼层
DEBUG调试一下,看看GPIOB寄存器
lxs0026 发表于 2024-3-28 23:13 | 显示全部楼层
在一些芯片中,特别是一些设计上,GPIO 引脚之间可能存在电气连接或影响。如果你的 GPIO_Pin_1 输入配置存在问题,可能会影响到相邻的 GPIO_Pin_2 的输出。
lxs0026 发表于 2024-3-28 23:14 | 显示全部楼层
试试更换同型号其他芯片试试,如果在更换了同样型号的芯片后问题仍然存在,那么可能是芯片本身的硬件问题。
lxs0026 发表于 2024-3-28 23:14 | 显示全部楼层
如果在代码中添加了对 GPIO_Pin_1 的输入配置,而且在这种情况下 GPIO_Pin_2 的电平一直为低,即使在代码中尝试将其设置为高电平,这可能是由于硬件上的问题引起的
一叶倾城wwq 发表于 2024-3-29 09:30 | 显示全部楼层
你这个库旧了吧,同款芯片,直接用cube配置的,都用了好几个项目了,没遇到这么简单的IO输出问题
 楼主| STM32F89C51 发表于 2024-3-30 14:52 | 显示全部楼层
digit0 发表于 2024-3-28 16:56
设置的是开漏还是推挽输出?

推挽哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部