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;
把“GPIOB ->IDR &=0X00000000; ” 这一句注释掉再试试 zhao.zhao 发表于 2017-6-10 13:01
把“GPIOB ->IDR &=0X00000000; ” 这一句注释掉再试试
我试了,还是一样,请多指教,谢谢
你配置PB的GPIO1、GPIO8-15都是输入,下拉输入,外部控制输入端需要有较强的上拉作用才能起作用,比如接上拉电阻或外部输入信号是推挽输出,请检查你的电路设计是否正确! 你把PB12 PB13 PB14 PB15 相关的连接图发上来看看,同意楼上的观点
页:
[1]