guhuawei19 发表于 2020-7-23 14:38:43

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

要配置GIPOA与GPIOB的IO口,配置完只有GPIOB的IO有输出,不知道什么原因?大神请帮忙分析下,我估计的GPIO端口配置的问题lled.h的代码
#ifndef __BSP_LED_H
#define __BSP_LED_H

#include "stm32f10x.h"

#define LED1_GPIO_CLK      RCC_APB2Periph_GPIOA
#define LED1_GPIO_PIN      GPIO_Pin_3
#define LED1_GPIO_PORT   GPIOA

#define LED2_GPIO_CLK      RCC_APB2Periph_GPIOA
#define LED2_GPIO_PIN      GPIO_Pin_4
#define LED2_GPIO_PORT   GPIOA

#define LED3_GPIO_CLK      RCC_APB2Periph_GPIOA
#define LED3_GPIO_PIN      GPIO_Pin_5
#define LED3_GPIO_PORT   GPIOA

#define LED4_GPIO_CLK      RCC_APB2Periph_GPIOA
#define LED4_GPIO_PIN      GPIO_Pin_6
#define LED4_GPIO_PORT   GPIOA

#define LED5_GPIO_CLK      RCC_APB2Periph_GPIOA
#define LED5_GPIO_PIN      GPIO_Pin_7
#define LED5_GPIO_PORT   GPIOA

#define LED6_GPIO_CLK       RCC_APB2Periph_GPIOB
#define LED6_GPIO_PIN       GPIO_Pin_0
#define LED6_GPIO_PORT      GPIOB

#define LED7_GPIO_CLK      RCC_APB2Periph_GPIOB
#define LED7_GPIO_PIN      GPIO_Pin_1
#define LED7_GPIO_PORT   GPIOB

#define LED8_GPIO_CLK       RCC_APB2Periph_GPIOB
#define LED8_GPIO_PIN       GPIO_Pin_2
#define LED8_GPIO_PORT      GPIOB


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


void LED_GPIO_Config(void)
{


                GPIO_InitTypeDef GPIO_InitTStruct;
                RCC_APB2PeriphClockCmd(LED1_GPIO_CLK|LED2_GPIO_CLK|LED3_GPIO_CLK|LED4_GPIO_CLK|LED5_GPIO_CLK,ENABLE);//打开GPIOB外设时钟
                GPIO_InitTStruct.GPIO_Pin = LED1_GPIO_PIN|LED2_GPIO_PIN|LED3_GPIO_PIN|LED4_GPIO_PIN|LED5_GPIO_PIN;
                GPIO_InitTStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                GPIO_InitTStruct.GPIO_Speed = GPIO_Speed_10MHz;
       
                RCC_APB2PeriphClockCmd(LED6_GPIO_CLK|LED7_GPIO_CLK|LED8_GPIO_CLK,ENABLE);//打开GPIOB外设时钟
                GPIO_InitTStruct.GPIO_Pin = LED6_GPIO_PIN|LED7_GPIO_PIN|LED8_GPIO_PIN;
                GPIO_InitTStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                GPIO_InitTStruct.GPIO_Speed = GPIO_Speed_10MHz;
       
                GPIO_Init(LED1_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
               
                GPIO_Init(LED2_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
               
                GPIO_Init(LED3_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);
               
                GPIO_Init(LED4_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED4_GPIO_PORT,LED4_GPIO_PIN);
               
                GPIO_Init(LED5_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED5_GPIO_PORT,LED5_GPIO_PIN);
               
                GPIO_Init(LED6_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED6_GPIO_PORT,LED6_GPIO_PIN);
               
                GPIO_Init(LED7_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED7_GPIO_PORT,LED7_GPIO_PIN);
               
                GPIO_Init(LED8_GPIO_PORT,&GPIO_InitTStruct);
                GPIO_ResetBits(LED8_GPIO_PORT,LED8_GPIO_PIN);

//         GPIO_SetBits(GPIOB,GPIO_PIN_2);
//         GPIO_InitTStruct.GPIO_Pin=GPIO_PIN_3;
//         GPIO_Init(GPIOB,&GPIO_InitTStruct);
//         GPIO_SetBits(GPIOB,GPIO_PIN_3);
//        

}


mylovemcu 发表于 2020-7-23 15:11:30

看一下寄存器就明白为什么这样不可以了   为了省事也不能这样省啊
同样是一个结构体的赋值开始赋值是LED1的值还没有进行初始化又进行LED6的赋值执行的结果就是最后一次赋值有效

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

yklstudent-1794 发表于 2020-7-23 19:46:29

楼主这么写就不觉得哪里有问题

radio2radio 发表于 2020-7-23 21:36:37

第15行覆盖了第10行,,把15行搬到第33行看看行不行。既然你前面用了“或”算法,A和B口,只需要分别init一次即可。

guhuawei19 发表于 2020-7-24 08:12:52

可以了,明白了
页: [1]
查看完整版本: 为什么这样配置IO口不可以呢?