IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【合泰HT32外部中断控制多路舵机】 -> 正文阅读

[嵌入式]【合泰HT32外部中断控制多路舵机】

合泰HT32外部中断控制多路舵机

本次分享的是外部中断进行多路舵机的控制,舵机的使用和外部中断的介绍在前面都讲过,需要的小伙伴看前面几篇文章

按键基本操作外部中断控制LED

实验效果

HT32按键控制多路舵机

这里想在说的是HT32中只有三个中断源
但是每个引脚都可以配置成外部中断个中断源有15个中断通道
void EXTI0_1_IRQHandler(void)
{
}

void EXTI2_3_IRQHandler(void)
{
}


void EXTI2_3_IRQHandler(void)
{
}



#define EXTI0_IRQn EXTI0_1_IRQn
#define EXTI1_IRQn EXTI0_1_IRQn
#define EXTI2_IRQn EXTI2_3_IRQn
#define EXTI3_IRQn EXTI2_3_IRQn
#define EXTI4_IRQn EXTI4_15_IRQn
#define EXTI5_IRQn EXTI4_15_IRQn
#define EXTI6_IRQn EXTI4_15_IRQn
#define EXTI7_IRQn EXTI4_15_IRQn
#define EXTI8_IRQn EXTI4_15_IRQn
#define EXTI9_IRQn EXTI4_15_IRQn
#define EXTI10_IRQn EXTI4_15_IRQn
#define EXTI11_IRQn EXTI4_15_IRQn
#define EXTI12_IRQn EXTI4_15_IRQn
#define EXTI13_IRQn EXTI4_15_IRQn
#define EXTI14_IRQn EXTI4_15_IRQn
#define EXTI15_IRQn EXTI4_15_IRQn


typedef enum
{
  EXTI_CHANNEL_0 = 0,
  EXTI_CHANNEL_1,
  EXTI_CHANNEL_2,
  EXTI_CHANNEL_3,
  EXTI_CHANNEL_4,
  EXTI_CHANNEL_5,
  EXTI_CHANNEL_6,
  EXTI_CHANNEL_7,
  EXTI_CHANNEL_8,
  EXTI_CHANNEL_9,
  EXTI_CHANNEL_10,
  EXTI_CHANNEL_11,
  EXTI_CHANNEL_12,
  EXTI_CHANNEL_13,
  EXTI_CHANNEL_14,
  EXTI_CHANNEL_15
} EXTI_Channel_TypeDef;

key.h

#ifndef _KEY_H_
#define _KEY_H_

#include "ht32f5xxxx_ckcu.h"
#include "ht32f5xxxx_gpio.h"
#include "ht32f5xxxx_01.h"

//定义使用端口
#define HT_GPIO_GROUP     (HT_GPIOB)

//引脚定义                                           
#define GPIO_PIN   				(GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_0|GPIO_PIN_1)
//定义方式
#define GPIO_PR           (GPIO_PR_DOWN)
//定义模式
#define GPIO_FIFO_MODE    (AFIO_FUN_GPIO)

void Key_Init(void);

#endif

key.c

#include "key.h"
#include "delay.h"

void Key_Init(void)
{
	EXTI_InitTypeDef EXTI_InitStruct;	
	CKCU_PeripClockConfig_TypeDef CKCUClock= {{0}};
	CKCUClock.Bit.PB = 1;  //开启GPIOB时钟
	CKCUClock.Bit.AFIO = 1; 
	CKCUClock.Bit.EXTI = 1;  //开启中断时钟
	CKCU_PeripClockConfig(CKCUClock, ENABLE);
	
	GPIO_InputConfig(HT_GPIO_GROUP, GPIO_PIN, ENABLE);
    GPIO_PullResistorConfig(HT_GPIO_GROUP, GPIO_PIN, GPIO_PR);
	
		//GPIOB_2 中断配置
	AFIO_GPxConfig( GPIO_PB, AFIO_PIN_2, AFIO_FUN_GPIO);
    AFIO_EXTISourceConfig(AFIO_EXTI_CH_2, AFIO_ESS_PB);//中断来源选择PB3
	EXTI_InitStruct.EXTI_Channel=EXTI_CHANNEL_2;
	EXTI_InitStruct.EXTI_Debounce=EXTI_DEBOUNCE_ENABLE;//决定是否去抖
	EXTI_InitStruct.EXTI_DebounceCnt = 65535;     
	EXTI_InitStruct.EXTI_IntType=EXTI_POSITIVE_EDGE;  //上升沿触发
	EXTI_Init(&EXTI_InitStruct);	
	NVIC_EnableIRQ(EXTI2_3_IRQn);//	
	EXTI_IntConfig(EXTI_CHANNEL_2, ENABLE);//检测中断源状态函数
	
	
	//GPIOB_0 中断配置
	AFIO_GPxConfig( GPIO_PB, AFIO_PIN_0, AFIO_FUN_GPIO);
    AFIO_EXTISourceConfig(AFIO_EXTI_CH_0, AFIO_ESS_PB);//中断来源选择PB3
	EXTI_InitStruct.EXTI_Channel=EXTI_CHANNEL_0;
	EXTI_InitStruct.EXTI_Debounce=EXTI_DEBOUNCE_ENABLE;//决定是否去抖
	EXTI_InitStruct.EXTI_DebounceCnt = 65535;     
	EXTI_InitStruct.EXTI_IntType=EXTI_POSITIVE_EDGE;  //上升沿触发
	EXTI_Init(&EXTI_InitStruct);	
	NVIC_EnableIRQ(EXTI0_1_IRQn);//	
	EXTI_IntConfig(EXTI_CHANNEL_0, ENABLE);//检测中断源状态函数
	
	
	//GPIOB_4 中断配置
	AFIO_GPxConfig( GPIO_PB, AFIO_PIN_4, AFIO_FUN_GPIO);
  	AFIO_EXTISourceConfig(AFIO_EXTI_CH_4, AFIO_ESS_PB);//中断来源选择PB3
	EXTI_InitStruct.EXTI_Channel=EXTI_CHANNEL_4;
	EXTI_InitStruct.EXTI_Debounce=EXTI_DEBOUNCE_ENABLE;//决定是否去抖
	EXTI_InitStruct.EXTI_DebounceCnt = 65535;     
	EXTI_InitStruct.EXTI_IntType=EXTI_POSITIVE_EDGE;  //上升沿触发
	EXTI_Init(&EXTI_InitStruct);	
	NVIC_EnableIRQ(EXTI4_15_IRQn);//	
	EXTI_IntConfig(EXTI_CHANNEL_4, ENABLE);//检测中断源状态函数


//	
//	//GPIOB_5 中断配置
//	AFIO_GPxConfig( GPIO_PB, AFIO_PIN_5, AFIO_FUN_GPIO);
//  AFIO_EXTISourceConfig(AFIO_EXTI_CH_5, AFIO_ESS_PB);//中断来源选择PB3
//	EXTI_InitStruct.EXTI_Channel=EXTI_CHANNEL_5;
//	EXTI_InitStruct.EXTI_Debounce=EXTI_DEBOUNCE_ENABLE;//决定是否去抖
//	EXTI_InitStruct.EXTI_DebounceCnt = 65535;     
//	EXTI_InitStruct.EXTI_IntType=EXTI_POSITIVE_EDGE;  //上升沿触发
//	EXTI_Init(&EXTI_InitStruct);	
//	NVIC_EnableIRQ(EXTI4_15_IRQn);//	
//	EXTI_IntConfig(EXTI_CHANNEL_5, ENABLE);//检测中断源状态函	
}

main.c

#include "ht32.h"
#include "ht32_board.h"
#include "led.h"
#include "delay.h"
#include "uart.h"
#include "key.h"
#include "time.h"

/**********************TH32 外部中断控制舵机**********************
Author:小殷

Date:2022-4-29
****************************************************************/


int main()
{
	uint8_t keynum = 0;
	Led_Init();
	USARTx_Init();
	GPTM_PWM_init();
	Key_Init();
	Servo_Run(45);
	Servo_Run2(45);
	Servo_Run3(45);
	Servo_Run4(45);
	printf("------key test------\n");
	while(1)
	{
		

	}
}

//细节函数局部里面key_stat 定义为static修饰要不然按键第二次无反应

void EXTI4_15_IRQHandler(void)
{
 		static uint8_t key_stat = 0; //按键状态
    if(key_stat == 0)
		{
			key_stat = 1;
			LED1_ON();
			Servo_Run(0);
		}
		else if(key_stat == 1)
		{
			key_stat = 0;
			LED1_OFF();
			Servo_Run(45);
		}
		EXTI_ClearEdgeFlag(EXTI_CHANNEL_4);
}

void EXTI2_3_IRQHandler(void)
{
	static uint8_t key_stat = 0; //按键状态 
	if(key_stat == 0)
		{
			key_stat = 1;
			LED2_ON();
			Servo_Run2(0);
		}
		else if(key_stat == 1)
		{
			key_stat = 0;
			LED2_OFF();
			Servo_Run2(45);
		}
		EXTI_ClearEdgeFlag(EXTI_CHANNEL_2);
}



void EXTI0_1_IRQHandler(void)
{
		static uint8_t key_stat = 0;
		if(key_stat == 0)
		{
			key_stat = 1;
			LED2_ON();
			Servo_Run3(0);
		}
		else if(key_stat == 1)
		{
			key_stat = 0;
			LED2_OFF();
			Servo_Run3(45);
		}
		EXTI_ClearEdgeFlag(EXTI_CHANNEL_0);
}

加油耶

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-04 07:29:03  更:2022-05-04 07:29:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:25:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码