当前位置: 首页 > 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.jsqmd.com/news/4972/

相关文章:

  • Eurocrypt 2021 s Accepted Papers
  • Linux云服务器如何手动配置DNS?
  • Python 输入、输出的用法
  • 第一章——概论 - AlgosEng
  • 劝娃妈和娃不要学老人坐姿有感:老人无奈才坐成那样的。。AI协助分析很到位
  • 从“看得见”到“能决策”:Operation Intelligence 重构企业智能运维新范式 - 实践
  • 使用JOL查看对象布局
  • 集训队互测投题——封印
  • 短视频流量|基于SprinBoot+vue的短视频流量数据分析系统(源码+数据库+文档) - 指南
  • 一天一款实用的AI工具,第4期,AI翻译成英语
  • Docker基础与工程部署
  • 安装MariaDB服务器流程介绍在Ubuntu 22.04系统
  • 初次尝试在kubernetes 1.31 上安装 人工智能模型运行平台 llm-d - 详解
  • 三种神器让LLM输出结构化数据:LangChain、LlamaIndex与Function Calling实战指南
  • 野指针
  • win11安装ensp
  • 自己湿热内蕴出汗痒和岳母生病2天不洗澡发痒的不同-完美解释小孩为啥没那么容易痒
  • 无刷电机驱动工程及PID算法FOC算法完成(超高质量超高质量
  • vue: ubuntu安装vue环境
  • golang实现ai聊天窗口
  • 源码反码补码
  • 图的分类法:解耦数据和图表类型
  • 完整教程:图解人工智能中的高等数学(python实现)---一元函数微分学
  • 35Bourbaki1-1@《数学原理》1-1@20250927
  • IDEA 2024的零卡死配置
  • Python + MediaPipe 手势绘画高级应用:从基础到创意交互 - 实践
  • Crypto 2021 s Accepted papers
  • 详细介绍:【数据结构】哈希表(Hash Table)详解
  • Github 12.3kstar, 3分钟起步做中后台?Go+Vue 脚手架,把权限、代码生成、RBAC 都封装好了
  • 250927