久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3192|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于STM32 usart串口的通過信號機(jī)—CV表的設(shè)計(jì) 附程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一、本項(xiàng)目意義:實(shí)現(xiàn)通過USART通信,通過幀信息控制通過信號機(jī)狀態(tài),可以設(shè)置燈絲故障,設(shè)置區(qū)間狀態(tài),點(diǎn)燈信息基于Flash內(nèi)的固定信息,與幀序列無直接交互,相當(dāng)于實(shí)現(xiàn)了電子連鎖,可用于教學(xué)實(shí)驗(yàn)。
二、CV表內(nèi)容:應(yīng)該包括信號設(shè)備類型,設(shè)備編號,設(shè)備燈絲狀態(tài)(代替燈絲繼電器),設(shè)備故障設(shè)置位(用于教學(xué)設(shè)置故障),通過信號機(jī)需要保存區(qū)間內(nèi)的占用情況
三、CV表示意圖





  1. #define Device_Type_Addr  0X08020000     //設(shè)備類型地址
  2. #define QJ_Position_Addr  0X08020002     //信號機(jī)區(qū)間位置
  3. #define DS_State_Addr  0X08020004        //01短路;10斷路
  4. #define Fault_Setting_Addr  0X08020006   //故障設(shè)置地址:0000 0111(藍(lán)白紅/綠黃紅)
  5. #define Recerve_Code1_Addr 0x08020008    //保留字節(jié)1~4
  6. #define Recerve_Code2_Addr 0x0802000a
  7. #define Recerve_Code3_Addr 0x0802000c
  8. #define Recerve_Code4_Addr 0x0802000e
  9. #define FQ_State_1_8_Addr 0x08020010     //區(qū)間1~8占用情況
  10. #define FQ_State_9_16_Addr 0x08020012
  11. #define FQ_State_17_24_Addr 0x08020014
  12. #define FQ_State_25_32_Addr 0x08020016
  13. #define FQ_State_33_40_Addr 0x08020018
  14. #define FQ_State_41_48_Addr 0x0802001a
  15. #define FQ_State_49_56_Addr 0x0802001c
  16. #define FQ_State_57_64_Addr 0x0802001e
復(fù)制代碼

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "stmflash.h"
  6. #include "assist_function.h"
  7. #include "adc.h"

  8. // v1.2.3 改進(jìn)電燈邏輯,實(shí)現(xiàn)參數(shù)化
  9. //已完全實(shí)現(xiàn)Fault標(biāo)志位的功能,故障自動轉(zhuǎn)移亮燈
  10. //存在問題:亮燈轉(zhuǎn)移所發(fā)布的廣播信息如何生成
  11. //解決方法:先打草稿模擬情景,總結(jié)得,轉(zhuǎn)移信息只與最終顯示狀態(tài)相關(guān),即,轉(zhuǎn)黃,轉(zhuǎn)紅,紅轉(zhuǎn)
  12. //具體思考跨區(qū)情況下,信息幀的生成有何區(qū)別


  13. int main(void)
  14. {       
  15.        
  16. //后期添加的變量;        PS不能全大寫變量名;
  17.          
  18.          u8 key;
  19.        
  20.          //u16 datatemp[8];//測試用變量
  21.          //datatemp[0] = QJ_Situation();//測試語句
  22.          //printf("\n\rInfo= %08x\n\r",datatemp[0]);//測試語句
  23. //后期添加的變量

  24.          delay_init();                     //延時(shí)函數(shù)初始化       
  25.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級分組2
  26.          uart_init(9600);         //串口初始化為9600
  27.          LED_Init();                           //初始化與LED連接的硬件接口          
  28.          Write_CV(0x03,Device_Type_Addr);
  29.          Adc_Init();
  30.    DMA_Init2();
  31.          ADC_SoftwareStartConvCmd(ADC1, ENABLE);//開始采集adc

  32.          
  33.         while(1)
  34.         {
  35.                 RS485_Receive_Data(rs485buf,&key);
  36.                 //取出通信幀內(nèi)容
  37.                 GetFrame();
  38.                
  39.                 //通信協(xié)議內(nèi)容識別邏輯
  40.                
  41.                 //非廣播命令 及 CRC校驗(yàn) 及 設(shè)備類型 及 密鑰檢驗(yàn) 及 是否收到新的幀
  42.                 //CRCCHECK = CRCcheck();return true/false;
  43.                 CRCcheck();
  44.                 if( CRCCHECK && TypeFrame == TongGuoXHJ && AccessFrame == 0xAA && key)
  45.                 {
  46.                         if(OrderFrame == 0x01)
  47.                         {
  48.                                 //修改flash設(shè)備編號
  49.                                 //傳回相應(yīng)幀;void SendBackMessage(0x01);根據(jù)參數(shù)判斷需要的返回信息,自動形成格式,提取flash中內(nèi)容填充幀序列;
  50.                                 Write_CV(SerailFrame,QJ_Position_Addr);
  51.                                 SendBackFrame[0] = 0x10;
  52.                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  53.                                 SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);       
  54.         SendBack();                               
  55.                         }
  56.                        
  57.                         else if(SerailFrame == STMFLASH_ReadHalfWord(QJ_Position_Addr))
  58.                         {
  59.                                 switch(OrderFrame)
  60.                                 {
  61.                                         case 0x02:
  62.                                                 //讀狀態(tài):命令+密鑰(0xAA)+設(shè)備類型+設(shè)備編號+00+00+CRC
  63.                                           //返回格式:命令+設(shè)備類型+設(shè)備編號+燈絲狀態(tài)+故障信息+00+CRC
  64.                                                 //參數(shù):cv位置
  65.                                                 SendBackFrame[0] = 0x20;
  66.                                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  67.                                           SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);
  68.                                                 SendBackFrame[3] = STMFLASH_ReadHalfWord(DS_State_Addr);
  69.                                                 SendBackFrame[4] = STMFLASH_ReadHalfWord(Fault_Setting_Addr);
  70.                                                 SendBack();
  71.                                                 break;
  72.                                         case 0x03:
  73.                                                 //寫狀態(tài):命令+密鑰(0xAA)+設(shè)備類型+設(shè)備編號+故障信息+00+CRC
  74.                                           //返回格式:命令+設(shè)備類型+設(shè)備編號+故障信息+00+00+CRC
  75.                                                 //參數(shù):故障內(nèi)容
  76.                                        
  77.                                                 Write_CV(Context5Frame,Fault_Setting_Addr);
  78.                                                 SendBackFrame[0] = 0x30;
  79.                                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  80.                                           SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);
  81.                                                 SendBackFrame[3] = STMFLASH_ReadHalfWord(Fault_Setting_Addr);
  82.                                                 SendBack();
  83.                                                 break;
  84.                                         case 0x04:
  85.                                                 //讀區(qū)間狀態(tài):命令+密鑰(0xAA)+設(shè)備類型+設(shè)備編號+00+00+CRC
  86.                                           //返回格式:命令+設(shè)備類型+設(shè)備編號+最近四個分區(qū)的狀況+00+00+CRC
  87.                                           //返回此區(qū)間前4個區(qū)間的狀態(tài)
  88.                                                 SendBackFrame[0] = 0x40;
  89.                                                 SendBackFrame[1] = STMFLASH_ReadHalfWord(Device_Type_Addr);//0x03
  90.                                           SendBackFrame[2] = STMFLASH_ReadHalfWord(QJ_Position_Addr);
  91.                                                 SendBackFrame[3] = QJ_Situation();
  92.                                                 SendBack();
  93.                                                 break;
  94.                                        
  95.                                         default:break;
  96.                                        
  97.                                 }
  98.                         }
  99.                        
  100.                 }
  101.                
  102.                 //區(qū)間信息廣播幀;不產(chǎn)生返回幀
  103.                 if(OrderFrame == 0x05 && CRCCHECK && TypeFrame == TongGuoXHJ && key)
  104.                 {
  105.                         //第一組數(shù)據(jù)區(qū)間1~8;9~16;17~24
  106.                         if(AccessFrame == 0x01)
  107.                         {
  108.                                 Write_CV(rs485buf[3],FQ_State_1_8_Addr);
  109.                                 Write_CV(rs485buf[4],FQ_State_9_16_Addr);
  110.                                 Write_CV(rs485buf[5],FQ_State_17_24_Addr);
  111.                         }
  112.                         //第二組數(shù)據(jù)區(qū)間25~32;33~40;41~48
  113.                         if(AccessFrame == 0x02)
  114.                         {
  115.                                 Write_CV(rs485buf[3],FQ_State_25_32_Addr);
  116.                                 Write_CV(rs485buf[4],FQ_State_33_40_Addr);
  117.                                 Write_CV(rs485buf[5],FQ_State_41_48_Addr);
  118.                         }
  119.                         //第三組數(shù)據(jù)區(qū)間49~56;57~64
  120.                         if(AccessFrame == 0x03)
  121.                         {
  122.                                 Write_CV(rs485buf[3],FQ_State_49_56_Addr);
  123.                                 Write_CV(rs485buf[4],FQ_State_57_64_Addr);
  124.                         }
  125.                         //單幀區(qū)域廣播;命令+密鑰(幀類型)+設(shè)備類型+區(qū)間Sector(0~7;可擴(kuò)展)+區(qū)間信息+00+CRC
  126.                         if(AccessFrame == 0x10)
  127.                         {
  128.                                 Write_CV(Context5Frame,FQ_State_1_8_Addr * 2 * (int)SerailFrame);//待測試(int)SerailFrame
  129.                         }
  130.                         printf("\n\rCopy\n\r");//TEST
  131.                 }
  132.                 //讀取電燈信息;判斷并點(diǎn)燈
  133.                 if( key ) LightLogic();
  134.                
  135.                

  136.         }         
  137. }
復(fù)制代碼

全部資料51hei下載地址:
v1.2.4點(diǎn)燈轉(zhuǎn)移需要斷線情況下自動實(shí)現(xiàn).7z (206.73 KB, 下載次數(shù): 10)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:711487 發(fā)表于 2020-3-19 12:38 來自手機(jī) | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 三区四区在线观看 | 国产在线观看免费 | 日韩在线欧美 | 日韩免费一区二区 | 欧洲免费毛片 | 嫩草国产 | 国产视频线观看永久免费 | 国产精品高潮呻吟久久av黑人 | 成人一区二区在线 | 97天天干 | 亚洲www啪成人一区二区 | 亚洲国产欧美在线人成 | 最新中文字幕久久 | 一区二区三区免费观看 | 欧美久久久久 | 视频一区二区三区中文字幕 | 成人免费精品 | 亚洲先锋影音 | 国产在线精品一区二区三区 | 亚洲另类视频 | 日韩成人免费视频 | 国产成人短视频在线观看 | 国产精品一区在线播放 | 成人小视频在线观看 | 亚洲精品久久久久久宅男 | 一区二区精品视频 | 欧美黑人狂野猛交老妇 | 一区二区三区中文字幕 | 国产黄色网址在线观看 | 在线观看日本高清二区 | 久久久2o19精品 | 99久久精品国产一区二区三区 | 国产乱肥老妇国产一区二 | 美女视频久久 | 国产高清免费视频 | 在线一区视频 | 五月婷婷视频 | 9久久婷婷国产综合精品性色 | 国产精品成人av | 99视频在线免费观看 | 国产成人在线播放 |