OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5975|回复: 6

IO口高低电平输出相反求解

[复制链接]

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2022-6-13
在线时间
29 小时
发表于 2022-9-7 16:54:25 | 显示全部楼层 |阅读模式
本帖最后由 SQS 于 2022-9-7 17:05 编辑

下载.png 下载 (1).png 单片机的IO我想输出的事高电平点亮LED灯,结果输出的确实0.5V左右的低电平。 下载 (2).png 还有这个两位共阴的数码管,7、8共阴脚本该输出的是低电平,最终输出的是高电平。

模块测试程序

模块测试程序
这是自己配置的IO口和程序,本该输出低电平的却输出高电平,两两相反了。求大神帮忙分析下。
1662541335217.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2022-9-9 20:56:49 | 显示全部楼层
是F1系列吗, F1系列要注意关闭JTAG接口,否则有几个特殊的IO默认不是IO模式。PC13 PC14 PC15拉电流有要求的,仔细看下手册有介绍的
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2022-6-13
在线时间
29 小时
 楼主| 发表于 2022-9-13 14:43:58 | 显示全部楼层
我用的是gd32f103v8t6的,stm32f103v8t6也是一样的。  
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2022-6-13
在线时间
29 小时
 楼主| 发表于 2022-9-16 11:18:51 | 显示全部楼层
Electronic 发表于 2022-9-9 20:56
是F1系列吗, F1系列要注意关闭JTAG接口,否则有几个特殊的IO默认不是IO模式。PC13 PC14 PC15拉电流有要求的 ...

你好,我关闭了JTAG接口还是没用。电平也是一样的混乱。
回复 支持 反对

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2022-9-20 16:54:52 | 显示全部楼层
GPIO的初始化过程看一下, 标准库的话最好把结构体初始化, 后者把每一个结构体成员为都赋值。 再者就是只单独调试这一块, 其他代码全部屏蔽掉, 可能其他地方被莫名其妙的修改了。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2022-6-13
在线时间
29 小时
 楼主| 发表于 2022-9-22 16:30:55 | 显示全部楼层
Electronic 发表于 2022-9-20 16:54
GPIO的初始化过程看一下, 标准库的话最好把结构体初始化, 后者把每一个结构体成员为都赋值。 再者就是只单 ...
  1. //端口初始化
  2. void GPIO_init(void){
  3.                
  4.                
  5.                 //打开端口时钟
  6.                 rcu_periph_clock_enable(RCU_GPIOA);                                                                                                //打开A组端口时钟
  7.                 rcu_periph_clock_enable(RCU_GPIOB);                                                                                                //打开B组端口时钟
  8.                 rcu_periph_clock_enable(RCU_GPIOC);                                                                                                //打开C组端口时钟
  9.                 rcu_periph_clock_enable(RCU_USART0);                                                                                        //打开串口时钟
  10.                 rcu_periph_clock_enable(RCU_USART1);
  11.                 rcu_periph_clock_enable(RCU_AF);                                                                                                        //打开复用时钟
  12.                 gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);        //JTAG-DP禁用和SW-DP使能
  13.                 //以太网管脚配置
  14.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_15);                                                                                                                                                                                        //CPU_RS输出管脚配置,输出最高50M,推拉模式(默认为高)
  15.                 gpio_bit_set(GPIOA,GPIO_PIN_15);       
  16.        
  17.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_4);                                                                                                                                                                                        //LAN_458_DIR输出管脚配置,输出最高50M,推拉模式(默认为高)
  18.                 gpio_bit_set(GPIOB,GPIO_PIN_4);
  19.        
  20.                 gpio_init(GPIOA,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_11);                                                                                                                                                                                                //TCP_LINK_IN输入管脚配置,输入最高50M,上拉模式
  21.                 gpio_bit_set(GPIOA,GPIO_PIN_11);
  22.        
  23.                 gpio_init(GPIOA,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_12);                                                                                                                                                                                                //LAN_ACK输入管脚配置,输入最高50M,上拉模式
  24.                 gpio_bit_set(GPIOA,GPIO_PIN_12);
  25.                
  26.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_5);                                                                                                                                                                                        //管理口CFG0输出管脚配置,输入最高50M,上拉模式(默认为高)
  27.                 gpio_bit_set(GPIOB,GPIO_PIN_5);
  28.                
  29.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_3);                                                                                                                                                                                //管理口CFGEN输入管脚配置,输入最高50M,上拉模式(默认为高)
  30.                 gpio_bit_set(GPIOB,GPIO_PIN_3);
  31.                                 //管脚状态初始化                                                                                                                                                                                                                                                                                                       
  32.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0);                                                                                                                                                                                        //TR芯片驱动信号
  33.                 gpio_bit_set(GPIOA,GPIO_PIN_0);                                                                                                                                                                                                                                                                                                                  //高电平悬空,低电平配置
  34.                
  35.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);                                                                                                                                                                                        //芯片选取信号,默认为低
  36.                 gpio_bit_reset(GPIOA,GPIO_PIN_1);       
  37.                
  38.                 gpio_init(GPIOC,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_13);                                                                                                                                                                                        //LED驱动,低有效
  39.                 gpio_bit_reset(GPIOA,GPIO_PIN_13);
  40.                
  41.                 gpio_init(GPIOA,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_14);                                                                                                                                                                                        //LED驱动,低有效
  42.                 gpio_bit_reset(GPIOA,GPIO_PIN_14);
  43.                
  44.                 gpio_init(GPIOA,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_15);                                                                                                                                                                                        //LED驱动,低有效
  45.                 gpio_bit_reset(GPIOA,GPIO_PIN_15);
  46.                
  47.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_4);                                                                                                                                                                                                //数码管驱动,高有效
  48.                 gpio_bit_set(GPIOA,GPIO_PIN_4);
  49.                
  50.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_5);               
  51.                 gpio_bit_set(GPIOA,GPIO_PIN_5);
  52.                
  53.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_6);               
  54.                 gpio_bit_set(GPIOA,GPIO_PIN_6);
  55.                
  56.                 gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_7);       
  57.                 gpio_bit_set(GPIOA,GPIO_PIN_7);
  58.                
  59.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0);       
  60.                 gpio_bit_set(GPIOB,GPIO_PIN_0);
  61.                
  62.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);
  63.                 gpio_bit_set(GPIOB,GPIO_PIN_2);
  64.                
  65.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_11);
  66.                 gpio_bit_set(GPIOB,GPIO_PIN_12);
  67.                
  68.                 gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_12);
  69.                 gpio_bit_set(GPIOB,GPIO_PIN_13);
  70.                
  71.                 gpio_init(GPIOB,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_2);                                                              //数码管共阴,低有效
  72.                 gpio_bit_reset(GPIOB,GPIO_PIN_1);
  73.                
  74.                 gpio_init(GPIOB,GPIO_MODE_OUT_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_10);       
  75.                 gpio_bit_reset(GPIOB,GPIO_PIN_10);
  76.                
  77. }
复制代码

我也按照你所说的方法试过了,也换过芯片,但还是一样电平混乱。
回复 支持 反对

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2022-9-24 14:21:06 | 显示全部楼层
为了确保一定配置成功了,最好的方法是在线调试或者用串口把寄存器的值打印出来,能确保配置一定是正确的,点LED这种负载,高电平 不一定就是3.3V,低电平不一定就是0V的,有电流一定程度有拉高拉低的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 18:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表