×
嵌入式 > 技术百科 > 详情

STM8自学笔记-002续 点亮LED

发布时间:2020-12-17 发布时间:
|

  点亮LED

  点亮一个LED灯,应该是大多数单片机教程的第一步。这是最为基础的一步,也是最令人兴奋的一步,迈出这一小步就是迈入STM8大门的一大步。


  通常,要对LED所在的单片机引脚(Pin)进行模式和电平设置,才能够点亮LED。先说C51和STM32上点亮LED的大致步骤,再来对比STM8上的步骤。


  熟悉51单片机的童鞋应该很清楚,先用sbit映射一个Pin,然后让映射量置1来点亮该Pin连接的LED(拉电流驱动,与之相反的叫灌电流驱动)。也就是说,至少需要两行代码才能点亮LED。


sbit LED=P1^0;  

LED=1;            //将P1.0口赋值 1,对外输出高电平


  在STM32库函数开发中,要先开启引脚Pin_x所在GPIOx的时钟,再对其初始化(选定输出引脚号、设置输出模式、设置引脚速度、应用设置),最后还要设置Pin电平。这样看来,要写6行。


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  

  gpioInitStruct.GPIO_Pin = GPIO_Pin_10; 

  gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;

  gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;

  GPIO_Init(GPIOB, &gpioInitStruct);  

  

  GPIO_SetBits(GPIOB, GPIO_Pin_10);


  在STM8中,只需要一行代码就能实现点亮LED。


GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);


//这句话调用的是stm8s_gpio.c中的GPIO初始化函数GPIO_Init()。

//“GPIOC,GPIO_PIN_3”代表选定了PC3

//“GPIO_MODE_OUT_PP_HIGH_SLOW”表示慢速的推挽输出,且输出高电平


  上述代码既完成了初始化,又完成了电平设置。言简意赅。

  

补充

  如果想要在点亮LED后 熄灭LED(即改变PC3的电平),有没有办法呢?

  把HIGH改成LOW?!像下面这样?


GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);


//“GPIOC,GPIO_PIN_3”代表选定了PC3

//“GPIO_MODE_OUT_PP_LOW_SLOW”表示慢速的推挽输出,且输出低电平


  这样是可行的!但会把一部分宝贵的CPU时间又用在了初始化上!能不能像51或STM32那样仅操作输出电平?


  ST官方早就准备了对应的库函数,而且一下子准备了3个。只要某个端口在前文进行过初始化,这三个函数就能够发挥作用。


GPIO_WriteHigh(GPIOC,GPIO_PIN_3); //置位,PC3=1

GPIO_WriteLow(GPIOC,GPIO_PIN_3); //复位,PC3=0

GPIO_WriteReverse(GPIOC,GPIO_PIN_3); //取反,PC3 ^=1


//这三个函数直接操作了GPIOx->ODR寄存器

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
激光跟踪仪市场2023年有望达5.216亿美元