中断驱动的自行车码表
PA11和PA12的GPIO设置:
//main.c
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;//PA11下降沿触发中断
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; //PA12下降沿触发中断
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);//设置中断优先级,enable中断向量表
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
接下来需要在stm32f1xx_it.c中实现EXTI15_10_IRQHandler:
void EXTI15_10_IRQHandler(void){
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11)!=0){
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
}
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_12)!=0){
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
}
}
然后调用HAL_GPIO_EXTI_Callback来判断并处理中断,消除标志位:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
switch(GPIO_Pin){
caseGPIO_PIN_11:
printf("Pressed\r\n");
mode=!mode; //更改模式
break;
caseGPIO_PIN_12: //增加一圈距离
counter++;
break;
}
}
定时器中断:
定时器初始化:
void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_Handler.Instance = TIM3;
TIM_Handler.Init.Prescaler = 48000;
TIM_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM_Handler.Init.Period = 199; //200ms
TIM_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&TIM_Handler);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&TIM_Handler, &sClockSourceConfig);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&TIM_Handler,&sMasterConfig);
}
计时器中断处理函数:
//stm32f1xx_it.c
void TIM3_IRQHandler(void)
{
HAL_TIM_IRQHandler(&TIM_Handler);
}
//main.c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){
if(htim->Instance == TIM3){
timer_flag= 1; //设置flag
timer_counter++;
}
中断驱动的自行车码表相关推荐
- 基于51单片机自行车码表设计
[毕设课设]基于51单片机自行车码表设计 效果图 Proteus仿真: 功能简介: 文件内容: 程序框架: 网盘链接: 效果图 更多内容请关注@WENJIE电子科技 基于51单片机proteu ...
- Garmin Edge 1030 Plus GPS 骑行码表今日立减 300 美元
Prime 会员日已全面生效,甚至山地自行车手和其他骑自行车的人也可以参加 Prime 会员日优惠 .Garmin Edge 1030 Plus自行车电脑在Prime Day的价格降至400美元,如果 ...
- 智能可穿戴平台,你更看好谁?
随着可穿戴设备大潮来袭,众巨头纷纷布局可穿戴.6月,苹果发布了Healthkit平台,谷歌则发布了AndroidWare平台,日前,腾讯(微信)的智能硬件计划曝光.前两者从系统层面出发,都希望自己成为 ...
- 从 B 站火到 GitHub,国人开发者又一黑科技面世!
点击上方"Github爱好者社区",选择星标 回复"资料",获取小编整理的一份资料月石一 发自 凹非寺本文经AI新媒体量子位(ID:QbitAI)授权转载,转载 ...
- 《痞子衡嵌入式半月刊》 第 50 期
痞子衡嵌入式半月刊: 第 50 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期. 本期刊是开源项目(GitHub: JayHeng/pz ...
- c语言单片机停车场收费系统,基于51单片机停车场车位引导系统设计
?周明彬 曾伊玲 摘要:在很多人流量大的地方,因为车辆集中的情况,所以每次经过停车场时都需要工作人员来指挥车辆,告诉车主停车场那些地方还有空余车位可以泊车.所以很多地方的旧停车场使用的管理方式,是十分 ...
- 自制车速记录仪「GitHub 热点速览 v.21.31」
作者:HelloGitHub-小鱼干 如果你有一辆普通的自行车,那么就可以使用下 X-TRACK 这个项目制作一个自己的测速器,记录你的行驶轨迹还有车速,体验一把硬件发烧友的乐趣.如果你有一个非 ma ...
- 基于单片机的压力流量报警器(附代码+仿真+论文)
基于单片机的压力流量报警器(附代码+仿真+论文) **==完整论文+代码+仿真可关注我在主页私我==** 摘要 关键字 第一章绪论 1.1课题背景及其意义 1.2 国内外的研究状况 1.3本文的主要研 ...
- Edge 705试用
Edge 705是早就听说过的玩意,特别是在环法自行车赛中出尽了风头,那时候在想我要是有一个Edge 705那该多好啊.现在,我终于有了一个Edge 705,是英文版的,不过有已经不错了.只是由于平时 ...
- 咕咚为何值1.5亿美元?
做运动社区和智能硬件产品的咕咚昨日宣布从SIG和软银获得3000千万美金的B轮融资,估值1.5亿美元.咕咚CEO申波表示这笔钱将主要用于研发.运营和人才引进. 之前咕咚曾在今年3月份获得来自深创投和中 ...
最新文章
- 编写高质量代码改善C#程序的157个建议——建议148:不重复代码
- jee websocket搭建总结
- 监视Rails进程内存泄漏的技巧
- Json字符串和对象相互转换
- super 和 this 关键字的比较+调用构造器(this)+动态绑定
- 从飞鸽传书口水仗想到的
- 怎样学操作系统?一文带你掌握核心内容
- hihocoder 1032 最长回文子串(Manacher)
- 可以扦插的花有哪些?
- Java高并发BlockingQueue重要的实现类二
- 精益创业实战 - 第3章 制作自己的精益画布
- vue项目通讯录_vue组件--通讯录
- [渝粤教育] 中国地质大学 国际贸易实务 复习题 (2)
- PPT去除页码的方法
- 华为热设计工程师待遇_【华为热设计工程师面试】华为的面试是我面试过程中相对简单的一个。-看准网...
- 情人节这些智能设备可千万别送女友
- IIS7配置PHP图解
- Yapi idea插件使用
- 继电器控制模块的一些知识
- Arcgis中影像空值NoData处理及去除背景值
热门文章
- 华为手机记事本导出_你知道便签记事本在手机哪里储存吗?
- 移动端html5广告的优势,移动端H5广告的互动类型探析
- 李维:我的回忆和一些有趣的事(About Borland)(转载)
- php 下载excel文件,单独设置工作表(sheet1,sheet2,sheet3....)
- Javascript复习必记知识点
- 面试中的Singleton
- 我的CSDN博客文章,被大学老师、本科生、公司 “引用“ 了!
- 为什么要用Citrix桌面虚拟化?
- linux双击执行sh脚本
- 怎么获取url_Requests库(十二)实战获取今日头条24小时热文