当前位置: 首页 > 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.hskmm.com/?act=detail&tid=19181

相关文章:

  • Eurocrypt 2021 s Accepted Papers
  • Linux云服务器如何手动配置DNS?
  • Python 输入、输出的用法
  • 第一章——概论 - AlgosEng
  • 劝娃妈和娃不要学老人坐姿有感:老人无奈才坐成那样的。。AI协助分析很到位
  • 使用JOL查看对象布局
  • 集训队互测投题——封印
  • 一天一款实用的AI工具,第4期,AI翻译成英语
  • Docker基础与工程部署
  • 安装MariaDB服务器流程介绍在Ubuntu 22.04系统
  • 三种神器让LLM输出结构化数据:LangChain、LlamaIndex与Function Calling实战指南
  • win11安装ensp
  • 自己湿热内蕴出汗痒和岳母生病2天不洗澡发痒的不同-完美解释小孩为啥没那么容易痒
  • vue: ubuntu安装vue环境
  • golang实现ai聊天窗口
  • 源码反码补码
  • 图的分类法:解耦数据和图表类型
  • IDEA 2024的零卡死配置
  • 数据结构
  • Python + MediaPipe 手势绘画高级应用:从基础到创意交互 - 实践
  • Crypto 2021 s Accepted papers
  • Github 12.3kstar, 3分钟起步做中后台?Go+Vue 脚手架,把权限、代码生成、RBAC 都封装好了
  • 250927
  • 完整教程:多线程——单例模式
  • A Twisty Movement
  • 完整教程:iOS 混淆与反调试反 Hook 实战,运行时防护、注入检测与安全加固流程
  • Attention进阶史(MHA, MQA, GQA, MLA)
  • 2025北京个性旅行自由行口碑推荐北京汇通清源国际旅游公司,满足独特需求,自由随心
  • 2025推拉门品牌推荐榜:聚焦玻璃推拉门,钛镁合金推拉门选择指南
  • 9-27