打印
[STM8]

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

[复制链接]
638|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dingy|  楼主 | 2020-10-14 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的STM8S208(UM0482)的开发板学习的时候用的风驰的STM8的教程在学 但是学到中断的时候发现按风驰的例子我修改对应的IO来调的时候不行像教程那样。

使用特权

评论回复
沙发
renyaq| | 2020-10-14 23:08 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
dingy|  楼主 | 2020-10-14 23:14 | 只看该作者
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--;
  }
}

使用特权

评论回复
地板
kangzj| | 2020-10-14 23:19 | 只看该作者
没看出来你是问啥呢,是不中断?

使用特权

评论回复
5
guoyt| | 2020-10-14 23:22 | 只看该作者
既然你买的人家的板子,你问问卖给你板子的老板。

使用特权

评论回复
6
dingy|  楼主 | 2020-10-14 23:25 | 只看该作者
不中断呢  这个程序我想要的是按下按键LED灭 再按一下LED亮  反复循环 但是现在不行

使用特权

评论回复
7
huwr| | 2020-10-14 23:31 | 只看该作者
你的中断函数呢

使用特权

评论回复
8
ousj| | 2020-10-14 23:36 | 只看该作者
现在你的代码就没实现这个功能。怎么可以。

使用特权

评论回复
9
renyaq| | 2020-10-14 23:39 | 只看该作者
你这写的挺乱。新手吧。

使用特权

评论回复
10
liuzaiy| | 2020-10-14 23:42 | 只看该作者
代码看不太好

使用特权

评论回复
11
kangzj| | 2020-10-14 23:46 | 只看该作者

好像是自己直接操作的寄存器?

使用特权

评论回复
12
zhanglli| | 2020-10-14 23:49 | 只看该作者
代码太乱 用工具生成一份吧

使用特权

评论回复
13
dingy|  楼主 | 2020-10-14 23:53 | 只看该作者

嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

评论回复
14
观海| | 2020-11-12 12:56 | 只看该作者
有哪些异常的现象啊

使用特权

评论回复
15
guanjiaer| | 2020-11-12 12:58 | 只看该作者
能描述一下现象吗

使用特权

评论回复
16
heimaojingzhang| | 2020-11-12 13:01 | 只看该作者
楼主对代码的理解 有误

使用特权

评论回复
17
keaibukelian| | 2020-11-12 13:02 | 只看该作者
代码还是很规整的

使用特权

评论回复
18
labasi| | 2020-11-12 13:03 | 只看该作者
楼主问题解决了吗

使用特权

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

本版积分规则

745

主题

10920

帖子

6

粉丝