原来是官方库函数GPIO_ReadInputPin存在问题。 /** * @brief Reads the specified GPIO input data pin. * @param GPIOx : Select the GPIO peripheral number (x = A to I). * @param GPIO_Pin : Specifies the pin number. * @retval BitStatus : GPIO input pin status.*/BitStatus GPIO_ReadInputPi...
解析如下:GPIO_ReadInputPin(GPIOA, GPIO_PIN_0)的原型是BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin){ return ((BitStatus)(GPIOx->IDR & (vu8)GPIO_Pin));}而BitStatus的原型是:typedef enum { RESET = 0, SET = !RESET}在使用时尽量不如下使用:if(GP...
if (GPIO_ReadInputPin(GPIOA, GPIO_PIN_2)) //如果按钮被按下 GPIO_WriteLow(GPIOA,GPIO_PIN_3); //带领 别的 GPIO_WriteHigh(GPIOA,GPIO_PIN_3); //LED关闭 切换GPIO 引脚 要切换 GPIO 引脚,我们有GPIO_WriteReverse(GPIOx,GPIO_PIN_y); 调用此函数将改变输出引脚的状态。该引脚为高电平时,变为...
STM8上电默认电平不对的解决 首先,手册上说的是对的,STM8/32上电后所有未被初始化的引脚电平全部是浮空的。但是我的程序却出现了一个奇怪的现象 void main(void) { init();//这里初始化时钟,IO ... if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5)==0) OUT2=1; while(1){ ... } } 就这么简单的一个...
9、GPIO_ReadInputPin(GPIOx,GPIO_Pin) //读取GPIO输入寄存器特定引脚位的值 10、GPIO_ExternalPullUpConfig(GPIOx,GPIO_Pin,NewState) //设置某引脚使能上拉电阻 NewState:ENABLE或者DISABLE 第三部分 时钟控制库 (clk.c) 1、CLK_DeInit() //恢复相关的时钟寄存器到默认值 CLK_DeInit(); 2、CLK_HSECmd(...
STM8 core采用了哈佛结构,有两条分别用于访问Flash和RAM,但Flash,RAM,and peripheral registers都被映射到了线性的16Mbyte(24位地址)的存储器空间中;stm8s208rb的GPIO and peripheral registers被映射到了0x00 5000 ~ 0x00 57FF地址空间。所以要在C语言中访问寄存器我们只需要指向这些地址空间的指针即可了。
我将stm8AF5288的端口初始化为: GPIO_Init(GPIOE,GPIO_PIN_2,GPIO_MODE_IN_FL_NO_IT ); //浮空输入无中断模式 然后: if( GPIO_ReadInputPin(GPIOE, GPIO_PIN_2)==1) 就点亮了的灯; 我把端口PE2接到3.3v,发现灯不亮 如果把 if( GPIO_ReadInputPin(GPIOE, GPIO_PIN_2)==0)就点亮了的灯; 把端口...
if(!GPIO_ReadInputPin(P_PortD,Power)){ delay_ms(20); time_count = 0; if(fPowerOn_flag == FALSE){ fPowerOn_flag = TRUE; } else{ if(fExitDCPower_flag == FALSE) fPowerOn_flag = FALSE; } } } 首先是20ms的延时,然后再次检测IO口的电平,如果为低,那么说明按键按下了,再延时20ms。
在STM8中,与某个外围设备有关的寄存器在地址上都是顺序排列的;比如与GPIO有关的寄存器有ODR、IDR、DDR、CR1、CR2,与PA口有关的这五个寄存器就被安排在了0x00 5000~0x00 5004这5个地址空间中,它们有一个0x005000的基地址,分别偏移0,1,2,3,4。
*/ delay_ms(20);/延时消抖 if(!GPIO_ReadInputPin(P_PortD,Power) delay_ms(20); time_count = 0; if(fPowerOn_flag = FALSE) fPowerOn_flag = TRUE; else if(fExitDCPower_flag = FALSE) fPowerOn_flag = FALSE; 首 13、先是20ms的延时,然后再次检测IO口的电平,如果为低,那么说明按键按下...