STM8S103F3P6在IAR环境下的问题

2019-12-10 18:14发布

咨询一个问题,我现在用STM8S103F3P6开发一个东西,因为管脚数量有限,所以把PD1(也就是SWIM)这个管脚接到了红外接收器(VS1838)上。现在有一个问题,使用IAR(版本3.10.4),库函数的方式,同样的代码,在别的管脚上可以工作,在PD1上就是不行。有人提到说,需要关闭PD1的SWIM模式,这个我试过,不论关不关,都不起作用。

但是,使用寄存器的方式,PD1就能正常工作(不用关闭SWIM模式)。
所以,STM8 IAR的库函数开发是不是有隐患?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
lzg1987
1楼-- · 2019-12-10 19:22
 精彩回答 2  元偷偷看……
Maurice
2楼-- · 2019-12-10 23:15
还有这种事,PD1的代码贴上来看看
lazybeach
3楼-- · 2019-12-10 23:58
Maurice 发表于 2019-9-19 11:49
还有这种事,PD1的代码贴上来看看

这是PD1初始化
void IR_pin_init(void)
{
  CFG->GCR |= CFG_GCR_SWD;
  GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_IN_PU_IT);
  //GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_FL_IT);
  EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_FALL_ONLY);
}

这是定时器初始化
/***************************************************
//              Time4定时器
//      约0.278ms中断一次
****************************************************/
void Timer4_init(void)
{
  TIM4_TimeBaseInit(TIM4_PRESCALER_32, 117);
  TIM4_SetCounter(117);
  TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE);

  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
//  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  /* enable interrupts */
  enableInterrupts();

  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);
}

这是中断,我通过串口把 irdata里面的数据打印出来,明显就异常了。更不要说后面的解析
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
  static u8  i = 0;                    
  static u8 startflag = 0;            
  if(GPIO_ReadInputPin(GPIOD, GPIO_PIN_1) == RESET)
  {
    if(startflag)                        
    {
      if(irtime < 63 && irtime >= 33)        //9ms+4.5ms
              i = 0;
      irdata = irtime;               
      irtime = 0;
      i++;
      if(i == 33)
      {
              irok = 1;
              i = 0;   
      }
    }
    else
    {
      irtime = 0;
      startflag = 1;
    }
  }
}
lazybeach
4楼-- · 2019-12-11 03:25
lzg1987 发表于 2019-9-19 11:43
库函数还分IAR和keil的?

额,不分,都能用
Maurice
5楼-- · 2019-12-11 04:15
本帖最后由 Maurice 于 2019-9-19 13:30 编辑
lazybeach 发表于 2019-9-19 13:06
这是PD1初始化
void IR_pin_init(void)
{


CFG->GCR|=CFG_GCR_SWD;
这句就是屏蔽SWIM功能,8S和8L标准库只提供了bit mask宏定义
lazybeach
6楼-- · 2019-12-11 05:53
 精彩回答 2  元偷偷看……

一周热门 更多>