你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM8-SO8】01-点灯

[复制链接]
slotg 发布时间:2019-1-23 21:44
本帖最后由 slotg 于 2019-1-23 21:59 编辑

STM8-SO8-DISCO 尺寸比想像中的还要小,小小的一块板子很有意思,只是这块板子的安排方式不适合直接外接模块或是元器件,因此我将底下的 3 块 MCU 小板掰下来打算插在面包板上做实验,而 STM8-SO8-DISCO 就做为编程器使用。

手上有一个 R,G,B LED 小模块:

DSC02518s.jpg

我想用 STM8S001J3 来点灯,看了一下引脚排列 pin5,6,7 都是 GPIO 很适合连接这个 LED 模块,模块直接插在面包板上只需要再拉一根共地就可以了,程序中只要在该引脚输出高电位时 LED 就会亮,我想实现的就是一个简单的 LED 依序亮灭功能,拉好线也写好了程序,只是下载烧录后运行结果怎么只亮了一个 LED 呢?pin5 与 pin6 所连接的 LED 不会亮!一开始怀疑是拉线的问题?也怀疑是程序上的问题?只是一个简单的点灯程序怎么会不行呢?

STM8S001J3 的 GPIO 引脚有复用功能:

P04.JPG

以 pin7 来说,这根引脚兼具了 PC3、PC4、PC5 功能,也就是程序改变这 3 个 GPIO 任何一个的状态时都会反应到 pin7 上,我在程序中发现了 pin5 定义成 PA3 时是有输出的,不过定义成 PB5 时 LED 就不会亮?查看数据手册的引脚说明里有这样的描述:

P01.JPG

PB4 与 PB5 有特别的说明:

P03.JPG

STM8 的 GPIO 架构图:

P02.JPG

这个意思是说明了当 PB4 与 PB5 做为输出时,P-BUFFER、PULL-UP 与保护二极管是不存在的,也就是 PB4 与 PB5 是一个单纯的 Open-Drain 架构,是不会有电位输出的!因此当 pin5 做为 PA3 时因为有 P-BUFFER 所以会有电位输出可以驱动 LED,但是做为 PB5 时就是一个单纯的 OD,以目前 LED 的接法当然是不会亮的。我改变 LED 接法,让 LED 的阳极接电源,阴级接控制引脚,程序输出低电位时点亮 LED,这样就实现了我想要的结果了。

DSC02521s.jpg

图上的模块原本 LED 的接法也是共地的,不过我将 LED 拆下反接改成了共接电源。

源代码:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm8s.h"

  3. /* Private defines -----------------------------------------------------------*/

  4. #define LED1_GPIO_PORT  (GPIOC)
  5. #define LED1_GPIO_PINS  (GPIO_PIN_3)

  6. #define LED2_GPIO_PORT  (GPIOB)
  7. #define LED2_GPIO_PINS  (GPIO_PIN_4)

  8. #define LED3_GPIO_PORT  (GPIOB)
  9. #define LED3_GPIO_PINS  (GPIO_PIN_5)

  10. /* Private function prototypes -----------------------------------------------*/
  11. void Delay (uint16_t nCount);

  12. /* Private functions ---------------------------------------------------------*/

  13. void main(void)
  14. {
  15.   /* Infinite loop */
  16.   GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  17.   GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  18.   GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  19.   
  20.   while (1)
  21.   {
  22.     GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);
  23.     Delay(0xFFFF);

  24.     GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);
  25.     Delay(0xFFFF);

  26.     GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);
  27.     Delay(0xFFFF);
  28.   }
  29.   
  30. }
复制代码

B01.rar (707.55 KB, 下载次数: 25)
收藏 1 评论3 发布时间:2019-1-23 21:44

举报

3个回答
STMCU-管管 回答时间:2019-1-24 09:47:42
谢谢分享
Kevin_G 回答时间:2019-1-24 10:03:25
赞一个
xujiantj 回答时间:2019-2-1 10:13:56
学习了
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版