找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1468|回复: 0
打印 上一主题 下一主题
收起左侧

STM32f103单片机工业控制急停模拟系统程序设计

[复制链接]
跳转到指定楼层
楼主
ID:827939 发表于 2023-10-20 18:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该项目名称为工业控制急停模拟系统,主要内容是模拟工业控制急停系统,通过检测外部急停信号,完成急停控制输出,并定时产生警报灯显示,将警报数据传输到计算机系统上。综合运用嵌入式系统与设计中微控制器外部中断、定时器、GPIO 和串口等内部资源,结合检测技术、输出控制技术以及串口通信传输的知识实现工业控制急停模拟系统的功能。
1、外部中断检测急停按键:将急停按键接到相应 GPI0 端口,设置 GPIO 为外部中断模式,设置合适的优先级和边沿检测方式,设计外部中断服务程序;
2、定时驱动 LED 提示报警闪烁:为了影响主程序的运行,LED 定时提示闪烁采用定时方式,选择适合的定时器,设置其工作模式、分频比、定时时间。编写定时中断服务程序。使警示 LED闪烁提示;
3、利用串口传输信息到 PC 机:选择其中一个串行接口,设置波特率 9600,无校验,停止位为 1 位,对应将数据传输到 PC 机的串口调试助手上,设计串口数据信息传输;
4、利用 GPIO 输出控制继电器(继电器可用 LED 模拟):将 GPIO 设置为通用推挽输出,控制继电器输出。通过综合以上模块软件,实现以下功能:1 )未按下紧急按键时,将正常运行信息通过串口发生至上位机;警示 LED常亮;2 )当按下紧急按键时,警示 LED 定时闪烁;将急停信息通过串口发生至上位机;并将输出控制的继电器切断(可用 LED 代替)。

单片机源程序如下:
  1. #include  "delay.h"
  2. #include  "led.h"
  3. #include  "key.h"
  4. #include  "usart.h"
  5. #include  "exti.h"
  6. #include   "TIM2.h"
  7. #include "sys.h"
  8. char flag;
  9. int main(void)
  10. {

  11.   delay_init();                     //延时函数初始化
  12.         uart_init(9600);            //串口初始化为9600  
  13.         LED_Init();                              //初始化与LED连接的硬件接口
  14.         KEY_Init();                                //        按键端口初始化
  15.         EXTIX_Init();                         //外部中断初始化
  16.   TIM2_TimBaseInit();
  17.          while(1)
  18.         {
  19.                 if(!flag)
  20.                 {
  21.                 led_zc();
  22.                 delay_ms(1000);
  23.                 printf("正常\r\n");
  24.         }
  25. }
  26. }
  27. void TIM2_IRQHandler(void)
  28. {
  29.         TIM_ClearFlag(TIM2 , TIM_FLAG_Update);//设置NVIC中断分组为2 , 2:2位抢占优先级,2级响应优先级
  30.                
  31.                 if(flag)
  32.                 {
  33.                         PAout(8)^=1;
  34.                         PDout(2) =1;
  35.                         printf("警报警报\r\n");
  36.                         TIM_GetITStatus(TIM2,TIM_IT_Update);
  37.                 }
  38. }

  39. void EXTI0_IRQHandler(void)
  40. {
  41.         delay_ms(10);
  42.         if(WK_UP==1)                 
  43.         {                                 
  44.                 flag +=1;        
  45. //                if(flag>1)flag=0;
  46.                 EXTI_ClearITPendingBit(EXTI_Line0);
  47.         }
  48. }
复制代码

原理图: 无
仿真: 无
代码: 程序.7z (185.55 KB, 下载次数: 10)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表