打印
[STM8]

新手关于STM8外部中断的一些问题请教请教

[复制链接]
1162|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yj96923|  楼主 | 2018-12-26 11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的STM8S208(UM0482)的开发板学习的时候用的风驰的STM8的教程在学 但是学到中断的时候发现按风驰的例子我修改对应的IO来调的时候不行像教程那样。查了很久没有办法,只能发帖请各位老师帮帮忙,下面是程序 。key_exti.h


#include "key_exti.h"
void Buttom_Init(void)
{
    GPIO_Init(GPIOC,Buttom0|Buttom1|Buttom2,GPIO_MODE_IN_PU_IT);
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
}


key_exti.c


#ifndef  __KEY_EXTI_H
#define  __KEY_EXTI_H
#include "stm8s.h"

#define Buttom0 GPIO_PIN_0
#define Buttom1 GPIO_PIN_1
#define Buttom2 GPIO_PIN_2


void Buttom_Init(void);
#endif



led.c

#include "led.h"

void LED_Init(void)
{
   GPIO_Init(GPIOH,(led1|led2|led3|led4),\
    GPIO_MODE_OUT_PP_HIGH_FAST);//定义LED的管脚的模式
}

void SetLedOFF(void)
{
    GPIO_Write(GPIOH, 0xff);
}


void Led_Reverse(GPIO_Pin_TypeDef LedPins)
{
   GPIO_WriteReverse(GPIOH, LedPins);
}


led.h

#ifndef __LED_H
#define __LED_H
#include "stm8s_gpio.h"

#define ON  0
#define OFF 1
#define bit_set   1
#define bit_reset 0

#define led1 GPIO_PIN_0
#define led2 GPIO_PIN_1
#define led3 GPIO_PIN_2
#define led4 GPIO_PIN_3

#define LED1(ON_OFF)  if(ON_OFF==ON)GPIO_WriteLow(GPIOH,led1);\
                      else GPIO_WriteHigh(GPIOH, led1)

#define LED2(ON_OFF)  if(ON_OFF==ON)GPIO_WriteLow(GPIOH, led2);\
                      else GPIO_WriteHigh(GPIOH, led2)

#define LED3(ON_OFF)  if(ON_OFF==ON)GPIO_WriteLow(GPIOC,led3);\
                      else GPIO_WriteHigh(GPIOH, led3)

#define LED4(ON_OFF)  if(ON_OFF==ON)GPIO_WriteLow(GPIOH, led4);\
                      else GPIO_WriteHigh(GPIOH, led4)
void LED_Init(void);
void SetLedOFF(void);
void Led_Reverse(GPIO_Pin_TypeDef LedPins);


main.c

#include "stm8s.h"
#include "intrinsics.h"
#include "uart.h"
#include "led.h"
#include "key_exti.h"
void Delay(u32 nCount);

/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

int main(void)
{

  /* Infinite loop */

  /*设置内部时钟16M为主时钟*/


  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
    /*!<Set High speed internal clock  */
   Buttom_Init();
   Uart_Init();
   LED_Init();
   __enable_interrupt();
   SetLedOFF();
   UART1_SendString("Key_Exti外部中断---STM8 Development Board of FengChi Electron",\
             sizeof("Key_Exti外部中断---STM8 Development Board of FengChi Electron"));
   Delay(0xffff);
   UART1_SendByte('\n');
   Delay(0xffff);
   while (1)
   {

   }



  }

void Delay(u32 nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}

沙发
734774645| | 2018-12-26 11:44 | 只看该作者
没看出来你是问啥呢,是不中断?

使用特权

评论回复
板凳
734774645| | 2018-12-26 11:44 | 只看该作者
既然你买的人家的板子,你问问卖给你板子的老板。

使用特权

评论回复
地板
yj96923|  楼主 | 2018-12-26 11:48 | 只看该作者
734774645 发表于 2018-12-26 11:44
没看出来你是问啥呢,是不中断?

不中断呢  这个程序我想要的是按下按键LED灭 再按一下LED亮  反复循环 但是现在不行

使用特权

评论回复
5
734774645| | 2018-12-26 11:51 | 只看该作者
你的中断函数呢

使用特权

评论回复
6
dongnanxibei| | 2018-12-26 15:01 | 只看该作者
现在你的代码就没实现这个功能。怎么可以。

使用特权

评论回复
7
dongnanxibei| | 2018-12-26 15:01 | 只看该作者
你这写的挺乱。新手吧。

使用特权

评论回复
8
磨砂| | 2019-1-4 09:54 | 只看该作者
代码看不太好

使用特权

评论回复
9
晓伍| | 2019-1-4 10:03 | 只看该作者
好像是自己直接操作的寄存器?

使用特权

评论回复
10
guanjiaer| | 2019-1-4 11:48 | 只看该作者
代码太乱 用工具生成一份吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

162

帖子

2

粉丝