当前位置: 首页 > news >正文

复刻江协激光触发器

复刻江协激光触发器

1、初始化硬件

  • PB8PB9分别设为SCKSDA端的接口

注意:江协的OLED驱动为软件模拟IIC所以不要使能IIC模块
img
img

  • 使能RCC,改为外部晶振
    img
  • PA9设为GPIO_EXTI,接入激光模块的D0端并使能GPIO的外部中断
    img
  • main.c中初始化OLED
  /* USER CODE BEGIN 2 */OLED_Init();OLED_Clear();

2、设置中断处理

  • stm32f1xx_it.c中定义变量count,用于记录传感器遮挡次数
/* USER CODE BEGIN PFP */
uint16_t count = 0;
/* USER CODE END PFP */
  • stm32f1xx_it.c的外设中断处理函数中写入以下内容:
/******************************************************************************/
/* STM32F1xx 外设中断处理                                                      */
/* 在这里加上外设中断的处理                                                     */
/* 关于可使用的外设名称,                                                       */
/* 请对照相应启动文件                 (startup_stm32f1xx.s).                    */
/******************************************************************************//*** @brief 这个函数用于处理外部中断 line[9:5] */
void EXTI9_5_IRQHandler(void)
{/* USER CODE BEGIN EXTI9_5_IRQn 0 */if(__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_9)){/* USER CODE END EXTI9_5_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);/* USER CODE BEGIN EXTI9_5_IRQn 1 */count++;}/* USER CODE END EXTI9_5_IRQn 1 */
}

注意,由于count变量位于stm32f1xx_it.c文件,所以读取变量值需要额外定义函数GetCounter,并在stm32f1xx_it.h中声明该函数

/* USER CODE BEGIN EFP */
uint16_t GetCounter(void);
/* USER CODE BEGIN 1 */
/** @brief 用于返回遮挡计数值* @retval 计数器的数值
*/
uint16_t GetCounter(void){return count;
}

3、打印内容

  • 在主循环外写入该代码:
	OLED_ShowString(1, 1, "count:");/* USER CODE END 2 */
  • 在主循环内写入以下内容
  while (1){OLED_ShowNum(2, 1, GetCounter(), 5);/* USER CODE END WHILE */

4、消除抖动

  • 在烧录并运行代码后,能发现显示的数字偶尔会突然增加很多,因此需要将信号消抖

由于处理中断的函数位于stm32f1xx_it.c中,所以单片机执行到HAL_GetTick();会卡死,导致无法利用HAL_Delay(uint8_t Delay)函数进行延时消抖

  • stm32f1xx_it.h中声明函数MyDelay(uint16_t time),并在对应源文件中进行定义
void MyDelay(uint16_t times);
/* USER CODE END EFP */
void MyDelay(uint16_t time){while(time--){;}
}

原理:使单片机做大数字的减法运算,达到延时效果

  • 在中断处理函数中添加延时函数(注意不要把数字设的过大)
void EXTI9_5_IRQHandler(void)
{/* USER CODE BEGIN EXTI9_5_IRQn 0 */if(__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_9)){/* USER CODE END EXTI9_5_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);/* USER CODE BEGIN EXTI9_5_IRQn 1 */MyDelay(1000);count++;}/* USER CODE END EXTI9_5_IRQn 1 */
}

5、流程图

主程序

img

外设中断

img

http://www.gsyq.cn/news/13002.html

相关文章:

  • Linux云服务器如何手动配置DNS?
  • 第一章——概论 - AlgosEng
  • 野指针
  • 自己湿热内蕴出汗痒和岳母生病2天不洗澡发痒的不同-完美解释小孩为啥没那么容易痒
  • vue: ubuntu安装vue环境
  • golang实现ai聊天窗口
  • 图的分类法:解耦数据和图表类型
  • 完整教程:图解人工智能中的高等数学(python实现)---一元函数微分学
  • IDEA 2024的零卡死配置
  • 3.WPF - 依赖属性 - 实践
  • PyTorch详细安装指南与常见问题解决强大的方案
  • 图解KV Cache
  • [K230学习笔记] 00前言
  • [CEOI 2025] theseus 做题记录
  • 2025/9/27
  • C# Smart3D Plate Part零件形状提取
  • Momentum Gradient Descent(动量梯度下降)
  • 深入解析:深度解析 CUDA-QX 0.4 加速 QEC 与求解器库
  • ProjectLibre
  • 实用指南:iOS 26 兼容测试实战,机型兼容、SwiftUI 兼容性改动
  • 大中午记梦
  • Arbess从入门到实战(3) - 启用Arbess+GitLab实现Vue.js计划自动化部署
  • 【深度学习计算机视觉】07:单发多框检测(SSD) - 指南
  • MZOI 2025.9.27
  • Pod、 PVC 、PV的刪除順序
  • Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium - 指南
  • 完整教程:AI 术语通俗词典:Diffusion Models(扩散模型)
  • 抽象化编程(Abstraction in Programming)
  • 详细介绍:198种组合算法+优化BiLSTM神经网络+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
  • 配置RedisTemplate序列化机制