gtygg 发表于 2017-6-10 12:38:34

STM32F103_IDR寄存器读不到端口的输入状态

本帖最后由 gtygg 于 2017-6-10 12:42 编辑

STM32F103_IDR寄存器读不到端口的输入状态

baud_rate_code 无论定义成u8 或者 u16, 都获取不到PB12 13 14 15的值(PB12 13 14 15输入的有效电平是高电平,端口配置的是下拉输入)
硬件仿真,baud_rate_code的值始终为0
baud_rate_code = GPIOB ->IDR;    //这样去读也不行
这种写法对吗,我查网上的资料,有像这么写的
是不是baud_rate_code的类型定义错了
请大家指教,谢谢

      u16 baud_rate_code=0;//全局变量

      GPIO_InitTypeDef GPIO_InitStructure;
      
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
               

      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_Init(GPIOB,&GPIO_InitStructure);
      GPIO_ResetBits(GPIOB,GPIO_Pin_3);
      

      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_Init(GPIOB,&GPIO_InitStructure);
      GPIO_ResetBits(GPIOB,GPIO_Pin_4);
      

      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_Init(GPIOB,&GPIO_InitStructure);
      GPIO_ResetBits(GPIOB,GPIO_Pin_0);      

   
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//PB5
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      
      GPIO_Init(GPIOB, &GPIO_InitStructure);

         //USART1-TX      
         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//PB6
         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
         GPIO_Init(GPIOB,&GPIO_InitStructure);

         //USART-RX      
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//PB7
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOB,&GPIO_InitStructure);

         
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
      GPIO_Init(GPIOB,&GPIO_InitStructure);
               
      
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
      GPIO_Init(GPIOB,&GPIO_InitStructure);
      
   
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
      GPIO_Init(GPIOB,&GPIO_InitStructure);      


      GPIOB ->IDR &=0X00000000;      
      baud_rate_code = GPIOB ->IDR&0x0000F000;      
//   baud_rate_code = GPIOB ->IDR;       
          baud_rate_code += 1;

zhao.zhao 发表于 2017-6-10 13:01:37

把“GPIOB ->IDR &=0X00000000; ” 这一句注释掉再试试

gtygg 发表于 2017-6-10 23:40:29

zhao.zhao 发表于 2017-6-10 13:01
把“GPIOB ->IDR &=0X00000000; ” 这一句注释掉再试试

我试了,还是一样,请多指教,谢谢

shuolang126 发表于 2017-6-12 08:36:11

你配置PB的GPIO1、GPIO8-15都是输入,下拉输入,外部控制输入端需要有较强的上拉作用才能起作用,比如接上拉电阻或外部输入信号是推挽输出,请检查你的电路设计是否正确!

zhao.zhao 发表于 2017-6-12 14:43:03

你把PB12 PB13 PB14 PB15 相关的连接图发上来看看,同意楼上的观点
页: [1]
查看完整版本: STM32F103_IDR寄存器读不到端口的输入状态