初探沁恒CH32V307VCT6评估板 1-1外部中断EXTI

旋转编码器计次

1,创建 .C .H 文件

Count_Sonser.c

Count_Sonser.h

2,包含头文件

#include "ch32v30x.h"
//#include "debug.h"

#include "Count_Sonser.h"

注意:如果不包含第一第二个头文件uint、int这些定义就会报错。

3,配置CountSonser_Init()相关

/*********************************************************************
1,开启GPIO时钟、AFIO时钟
2,初始化GPIO
3,AFIO复用GPIO到EXTI  

                              -->GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
4,初始化EXTI
5,给NVIC分组,一个工程只能分一次组。

                              -->NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
6,初始化NVIC
7,声明中断通道是一个中断          -->void EXTI0_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));
*/

#include "ch32v30x.h"
#include "Count_Sonser.h"
#include "debug.h"/*********************************************************************
1,开启GPIO时钟、AFIO时钟
2,初始化GPIO
3,AFIO复用GPIO到EXTI   -->GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
4,初始化EXTI
5,给NVIC分组                              -->NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
6,初始化NVIC
7,声明中断通道是一个中断          -->void EXTI0_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));
*/int16_t Get_Sonser ;
void CountSonser_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启AFIO、GPIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;           //上拉输入模式GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStruct);GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0);   //AFIO复用EXTI-->EXTI_Lin0;GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);   //AFIO复用EXTI-->EXTI_Lin1;EXTI_InitTypeDef EXTI_InitStruct = {0};EXTI_InitStruct.EXTI_Line = EXTI_Line0 | EXTI_Line1;         //通道0和通道1EXTI_InitStruct.EXTI_LineCmd = ENABLE;EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;             //触发模式配置为中断模式EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;        //下降沿触发EXTI_Init(&EXTI_InitStruct);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);             //中断分组2,先占优先级和响应优先级都配置为2NVIC_InitTypeDef NVIC_InitStruct = {0};NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;               //EXTI中断0NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;   //先占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; //响应优先级1NVIC_Init(&NVIC_InitStruct);NVIC_InitStruct.NVIC_IRQChannel = EXTI1_IRQn;               //EXTI中断1NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;   //先占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; //响应优先级2NVIC_Init(&NVIC_InitStruct);
}
//返回Get_Sonser的值
int16_t GetSonSer(void)
{int16_t temp ;temp = Get_Sonser;Get_Sonser = 0;return temp;
}
/** 声明这是一个中断,("WCH-Interrupt-fast")说明是个高速中断* 这句不能少* */
void EXTI0_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));
void EXTI0_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line0) == SET)      //判断中断挂起标志位{if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == Bit_RESET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == Bit_RESET){Get_Sonser--;}}}EXTI_ClearITPendingBit(EXTI_Line0);       //清除中断挂起标志位
}void EXTI1_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));//声明这是一个中断,("WCH-Interrupt-fast")说明是个高速中断
void EXTI1_IRQHandler(void)
{if(EXTI_GetITStatus(EXTI_Line1) == SET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == Bit_RESET){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) == Bit_RESET){Get_Sonser++;}}}EXTI_ClearITPendingBit(EXTI_Line1);
}

4,实验现象 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何掌握 Java 正则表达式 的基本语法及在 Java 中的应用

正则表达式是一种用于匹配字符串的模式,在许多编程语言中广泛使用。Java 正则表达式提供了强大的文本处理能力,能够对字符串进行查找、替换、分割等操作。 一、正则表达式的基本语法 正则表达式由普通字符和特殊字符组成。普通字符包括字母、数字和标点…

网络协议三

数据中心 一、DNS 现在网站的数目非常多,常用的网站就有二三十个,如果全部用 IP 地址进行访问,恐怕很难记住 根 DNS 服务器 :返回顶级域 DNS 服务器的 IP 地址 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址 …

汇凯金业:贵金属交易规则有哪些

贵金属投资目前非常火热,许多投资者从中获得了可观的收益。新手投资者在进入贵金属市场及其交易之前,务必要了解清楚贵金属的交易规则。了解规则和差异能帮助新手更好地进行贵金属投资交易。下面我们以现货类贵金属为例,详细说明贵金属的交易…

一周学会Django5 Python Web开发 - Django5内置Auth认证系统-用户修改密码实现

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计59条视频,包括:2024版 Django5 Python we…

基于springboot的-仓库 管理系统【附:资料➕文档】

前言:我是源码分享交流Coding,专注JavaVue领域,专业提供程序设计开发、源码分享、 技术指导讲解、各类项目免费分享,定制和毕业设计服务! 免费获取方式--->>文章末尾处! 项目介绍: 管理员…

数字IC后端物理验证PV | TSMC 12nm Calibre Base Layer DRC案例解析

基于TSMC 12nm ARM A55 upf flow后端设计实现训练营将于6月中旬正式开班!小班教学!目前还有3个名额,招满为止!有需要可以私信小编 ic-backend2018报名。吾爱IC社区所有训练营课程均为直播课! 这个课程支持升级成双核A…

服务器禁止密码登陆

转载请标明出处:https://blog.csdn.net/donkor_/article/details/139444224 文章目录 一、前言二、编辑sshd_config文件三、重启服务四、总结 一、前言 复杂的密码,登陆服务器的时候,也是很不方便的。并且频繁登陆,暴露给外界&am…

c++ 里函数选择的优先级:普通函数、模板函数、万能引用,编译器选择哪个执行呢?

看大师写的代码时,除了在类里定义了 copy 构造函数,移动构造函数,还定义了对形参采取万能引用的构造函数,因此有个疑问,这时候的构造函数优先级是什么样的呢?简化逻辑测试一下,如下图&#xff0…

【Vue】路由的封装抽离

问题:所有的路由配置都在main.js中合适吗? 目标:将路由模块抽离出来。 好处:拆分模块,利于维护 路径简写: 脚手架环境下 指代src目录,可以用于快速引入组件 完整代码 router/index.js // 但…

探索贷款交易平台的技术架构与创新应用

随着金融科技的快速发展,贷款交易平台作为金融行业的重要组成部分,正扮演着越来越重要的角色。本文将深入探讨贷款交易平台的技术架构和创新应用,从前端设计、后端系统、安全保障和智能化服务等方面进行全面解析,帮助读者更好地了…

【Python报错】已解决AttributeError: list object has no attribute ’shape‘ ( Solved )

解决Python报错:AttributeError: ‘list’ object has no attribute ‘shape’ (Solved) 在Python中,AttributeError表明你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute shape的错误,这…

为什么要用Git

1. Git是什么 1.1. 概述 Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统如果中央服务器宕机则会影响数据和协同开发。 Git是分布式的版本控制系统,客户端不只是提取最新版本的快照,而且将整个…

【Java毕业设计】基于Java的特色美食推荐网站的设计与实现

文章目录 摘 要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 Java编程语言1.4.2 SpringBoot框架1.4.3 MySQL数据库1.4.4 B/S结构1.4.5 MVC模式 2 系统需求分析2.1 可行性分析2.2 任务概述2.3 功能性需求3.2.2 数据库逻辑结构设…

外汇天眼:FSCS确认TenetConnect Services Ltd已任命管理人

2024年6月5日,Tenet Group Ltd的董事们任命了Interpath Ltd的Ed Boyle、Howard Smith和Rob Spence为联合管理人。Ed Boyle和Rob Spence也被任命为其子公司Tenet Ltd、TenetConnect Ltd和TenetConnect Services Ltd的联合管理人。Tenet Mortgage Services Ltd和Tenet…

【计算机视觉(8)】

基于Python的OpenCV基础入门——图像直方图 直方图图像直方图 图像直方图代码以及实现效果 直方图 直方图是一种用于描述图像亮度分布的统计工具。它将图像的像素亮度值按照不同的亮度等级进行计数,并以直方图的形式呈现出来。图像直方图可以显示图像中每个亮度级别…

点击式的excel电子表格查找修改功能,比xlookup和vlookup简单,多列关联查询速度更快

经过实际测试,excel的xlookup确实非常简单,有部分功能也非常快。但是有的人不会公式,或者不喜欢用公式,或者没有excel2021以上的版本。而且xlookup确实也有些还不是很完美的地方,比如对多列关联查询很慢。所以我们还是…

selenium非全新的方式同时启动多个浏览器又互不影响的一种实现方法,欢迎讨论!

最近在做模拟浏览器批量定时自动点击实现批量操作功能,主要使用selenium,但是发现selenium直接调用本地浏览器,启动的是一个全新的(与手动打开的不一致),网站可以检测到,每次都要双重验证(密码登…

Windows系统中不同Java版本共存

Windows系统中不同Java版本共存的方法 在Windows系统中,有时我们需要同时运行多个Java应用,而这些应用可能依赖于不同版本的Java Development Kit (JDK) 或 Java Runtime Environment (JRE)。为了实现这种需求,我们需要在Windows中配置多个J…

电商APP用户体验提升技巧:一个实战案例

随着网络和移动技术的快速发展,加上全球疫情的影响,电子商务应用程序改变了人们的购物方式,积累了大量的用户群体。如今,一个成功的电子商务应用程序,除了网站用户界面的美,电子商务用户体验的设计&#xf…

深度学习笔记: 最详尽LinkedIn Feed 排名系统设计

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家! LinkedIn Feed 排名 1. 问题陈述 设计一个个性化的LinkedIn Feed,以最大化用户的长期参与度…