uint16_t LCD_ReadReg(u8 LCD_Reg)
{
uint16_t readdata;
LCD_WR_REG(LCD_Reg); //写入要读的寄存器号
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DATA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; // 上拉输入
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_GPIO_DATA_PORT, &GPIO_InitStructure);
Write_Data(0x0000);
Set_Rs;
Clr_Cs;
//读取数据(读寄存器时,并不需要读2次)
Clr_nRd;
Set_nRd;
readdata = GPIO_ReadInputData(GPIOB); //这句有问题
//assert_param(IS_GPIO_ALL_PERIPH(GPIOB));
//readdata = ((uint16_t)GPIOB->IDR); //这句可以
Set_Cs;
GPIO_InitStructure.GPIO_Pin = LCD_GPIO_DATA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LCD_GPIO_DATA_PORT, &GPIO_InitStructure);
Write_Data(0xffff);
return readdata;
}
为什么用如下语句
readdata = GPIO_ReadInputData(GPIOB); //这句有问题
就不正常了。
用如下方式却可以?
//assert_param(IS_GPIO_ALL_PERIPH(GPIOB));
//readdata = ((uint16_t)GPIOB->IDR); //这句可以
库函数里面 GPIO_ReadInputData(GPIO_TypeDef* GPIOx)原型如下:
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
{
/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
return ((uint16_t)GPIOx->IDR);
}
也是用到 //assert_param(IS_GPIO_ALL_PERIPH(GPIOB));
//readdata = ((uint16_t)GPIOB->IDR);
2句语句的啊!
|