你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么这样配置IO口不可以呢?

[复制链接]
guhuawei19 提问时间:2020-7-23 14:38 /
要配置GIPOA与GPIOB的IO口,配置完只有GPIOB的IO有输出,不知道什么原因?大神请帮忙分析下,我估计的GPIO端口配置的问题lled.h的代码
  1. #ifndef __BSP_LED_H
  2. #define __BSP_LED_H

  3. #include "stm32f10x.h"

  4. #define LED1_GPIO_CLK      RCC_APB2Periph_GPIOA  
  5. #define LED1_GPIO_PIN      GPIO_Pin_3
  6. #define LED1_GPIO_PORT     GPIOA

  7. #define LED2_GPIO_CLK      RCC_APB2Periph_GPIOA
  8. #define LED2_GPIO_PIN      GPIO_Pin_4
  9. #define LED2_GPIO_PORT     GPIOA

  10. #define LED3_GPIO_CLK      RCC_APB2Periph_GPIOA
  11. #define LED3_GPIO_PIN      GPIO_Pin_5
  12. #define LED3_GPIO_PORT     GPIOA

  13. #define LED4_GPIO_CLK      RCC_APB2Periph_GPIOA
  14. #define LED4_GPIO_PIN      GPIO_Pin_6
  15. #define LED4_GPIO_PORT     GPIOA

  16. #define LED5_GPIO_CLK      RCC_APB2Periph_GPIOA
  17. #define LED5_GPIO_PIN      GPIO_Pin_7
  18. #define LED5_GPIO_PORT     GPIOA

  19. #define LED6_GPIO_CLK       RCC_APB2Periph_GPIOB
  20. #define LED6_GPIO_PIN       GPIO_Pin_0
  21. #define LED6_GPIO_PORT      GPIOB

  22. #define LED7_GPIO_CLK      RCC_APB2Periph_GPIOB
  23. #define LED7_GPIO_PIN      GPIO_Pin_1
  24. #define LED7_GPIO_PORT     GPIOB

  25. #define LED8_GPIO_CLK       RCC_APB2Periph_GPIOB
  26. #define LED8_GPIO_PIN       GPIO_Pin_2
  27. #define LED8_GPIO_PORT      GPIOB


  28. void LED_GPIO_Config(void);
复制代码
led.c代码如下
  1. #include "BSP_LED.h"


  2. void LED_GPIO_Config(void)
  3. {


  4.                 GPIO_InitTypeDef GPIO_InitTStruct;
  5.                 RCC_APB2PeriphClockCmd(LED1_GPIO_CLK|LED2_GPIO_CLK|LED3_GPIO_CLK|LED4_GPIO_CLK|LED5_GPIO_CLK,ENABLE);  //打开GPIOB外设时钟
  6.                 GPIO_InitTStruct.GPIO_Pin = LED1_GPIO_PIN|LED2_GPIO_PIN|LED3_GPIO_PIN|LED4_GPIO_PIN|LED5_GPIO_PIN;
  7.                 GPIO_InitTStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  8.                 GPIO_InitTStruct.GPIO_Speed = GPIO_Speed_10MHz;
  9.        
  10.                 RCC_APB2PeriphClockCmd(LED6_GPIO_CLK|LED7_GPIO_CLK|LED8_GPIO_CLK,ENABLE);  //打开GPIOB外设时钟
  11.                 GPIO_InitTStruct.GPIO_Pin = LED6_GPIO_PIN|LED7_GPIO_PIN|LED8_GPIO_PIN;
  12.                 GPIO_InitTStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  13.                 GPIO_InitTStruct.GPIO_Speed = GPIO_Speed_10MHz;
  14.        
  15.                 GPIO_Init(LED1_GPIO_PORT,&GPIO_InitTStruct);
  16.                 GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
  17.                
  18.                 GPIO_Init(LED2_GPIO_PORT,&GPIO_InitTStruct);
  19.                 GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
  20.                
  21.                 GPIO_Init(LED3_GPIO_PORT,&GPIO_InitTStruct);
  22.                 GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);
  23.                
  24.                 GPIO_Init(LED4_GPIO_PORT,&GPIO_InitTStruct);
  25.                 GPIO_ResetBits(LED4_GPIO_PORT,LED4_GPIO_PIN);
  26.                
  27.                 GPIO_Init(LED5_GPIO_PORT,&GPIO_InitTStruct);
  28.                 GPIO_ResetBits(LED5_GPIO_PORT,LED5_GPIO_PIN);
  29.                
  30.                 GPIO_Init(LED6_GPIO_PORT,&GPIO_InitTStruct);
  31.                 GPIO_ResetBits(LED6_GPIO_PORT,LED6_GPIO_PIN);
  32.                
  33.                 GPIO_Init(LED7_GPIO_PORT,&GPIO_InitTStruct);
  34.                 GPIO_ResetBits(LED7_GPIO_PORT,LED7_GPIO_PIN);
  35.                
  36.                 GPIO_Init(LED8_GPIO_PORT,&GPIO_InitTStruct);
  37.                 GPIO_ResetBits(LED8_GPIO_PORT,LED8_GPIO_PIN);

  38. //         GPIO_SetBits(GPIOB,GPIO_PIN_2);
  39. //         GPIO_InitTStruct.GPIO_Pin=GPIO_PIN_3;
  40. //         GPIO_Init(GPIOB,&GPIO_InitTStruct);
  41. //         GPIO_SetBits(GPIOB,GPIO_PIN_3);
  42. //        

  43. }
复制代码



收藏 评论4 发布时间:2020-7-23 14:38

举报

4个回答
mylovemcu 回答时间:2020-7-23 15:11:30
看一下寄存器就明白为什么这样不可以了   为了省事也不能这样省啊  
同样是一个结构体的赋值  开始赋值是LED1的值  还没有进行初始化  又进行LED6的赋值  执行的结果就是最后一次赋值有效

不想看寄存器就记住一点  同一组IO口  同一种配置方式可以使用一个初始化  配置以后必须进行初始化以后在进行下一组IO的配置  否则之前的IO配置无效

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

yklstudent 回答时间:2020-7-23 19:46:29
楼主这么写就不觉得哪里有问题
radio2radio 回答时间:2020-7-23 21:36:37
第15行覆盖了第10行,,把15行搬到第33行看看行不行。既然你前面用了“或”算法,A和B口,只需要分别init一次即可。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

guhuawei19 回答时间:2020-7-24 08:12:52
可以了,明白了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版