搜索
查看: 2403|回复: 4

[求助] STM8S003引脚复用如何在程序中定义?

[复制链接]

该用户从未签到

14

主题

76

帖子

9

蝴蝶豆

金牌会员

最后登录
2023-12-5
发表于 2019-8-31 10:52:04 | 显示全部楼层 |阅读模式
这个原理图中MCU_SWIM是烧录脚,但是和一个按键的输入IO口复用,然后我在stm8s_gpio.h和stm8s.h中均没有对复用功能的函数,然后应该怎么去定义这些复用功能,像STM32在stm32f10x.c中有定义 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState){
  uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;

  /* Check the parameters */
  assert_param(IS_GPIO_REMAP(GPIO_Remap));
  assert_param(IS_FUNCTIONAL_STATE(NewState));  

  if((GPIO_Remap & 0x80000000) == 0x80000000)
  {
    tmpreg = AFIO->MAPR2;
  }
  else
  {
    tmpreg = AFIO->MAPR;
  }

  tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
  tmp = GPIO_Remap & LSB_MASK;

  if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
  {
    tmpreg &= DBGAFR_SWJCFG_MASK;
    AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
  }
  else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
  {
    tmp1 = ((uint32_t)0x03) << tmpmask;
    tmpreg &= ~tmp1;
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }
  else
  {
    tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
    tmpreg |= ~DBGAFR_SWJCFG_MASK;
  }

  if (NewState != DISABLE)
  {
    tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
  }

  if((GPIO_Remap & 0x80000000) == 0x80000000)
  {
    AFIO->MAPR2 = tmpreg;
  }
  else
  {
    AFIO->MAPR = tmpreg;
  }  
}
但是STM8S里面的标准库里面没有这样的复用功能重映射的函数定义改如何解?各位有没有遇到过这样的问题的?

STM8S003_1.png
回复

使用道具 举报

该用户从未签到

14

主题

736

帖子

256

蝴蝶豆

论坛元老

最后登录
2021-4-20
发表于 2019-9-6 10:54:40 | 显示全部楼层
在软件上有一个选项字节的设置  可以设置复用功能
163225tzpbqbqtmligvvq0.jpg
20150722185435754.png
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

76

帖子

9

蝴蝶豆

金牌会员

最后登录
2023-12-5
 楼主| 发表于 2019-9-6 14:14:21 | 显示全部楼层
mylovemcu 发表于 2019-9-6 10:54
在软件上有一个选项字节的设置  可以设置复用功能

我用的编译器是IAR,不是ST的
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1306

帖子

929

蝴蝶豆

版主

最后登录
2021-3-31
发表于 2019-9-9 16:57:15 | 显示全部楼层
从手册上能看出来,先禁止这个功能,然后就可以配置成IO口了。但是要注意,禁止后就不能再烧录和在线调试了。
STM8 swim to io.PNG
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

76

帖子

9

蝴蝶豆

金牌会员

最后登录
2023-12-5
 楼主| 发表于 2019-9-9 17:24:18 | 显示全部楼层
butterflyspring 发表于 2019-9-9 16:57
从手册上能看出来,先禁止这个功能,然后就可以配置成IO口了。但是要注意,禁止后就不能再烧录和在线调试了 ...

当全局配置寄存器的SWD的bit位置1时,烧录口的引脚成为GPIO。版主英文功底之深,佩服。多谢指点迷津
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-25 00:24 , Processed in 1.173608 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表