stm32f10x_it.c 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382
  1. /**
  2. ******************************************************************************
  3. * @file Project/STM32F10x_StdPeriph_Template/stm32f10x_it.c
  4. * @author MCD Application Team
  5. * @version V3.5.0
  6. * @date 08-April-2011
  7. * @brief Main Interrupt Service Routines.
  8. * This file provides template for all exceptions handler and
  9. * peripherals interrupt service routine.
  10. ******************************************************************************
  11. * @attention
  12. *
  13. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  14. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  15. * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  16. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  17. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  18. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  19. *
  20. * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  21. ******************************************************************************
  22. */
  23. /* Includes ------------------------------------------------------------------*/
  24. #include "stm32f10x_it.h"
  25. #include "stm32f10x_exti.h"
  26. #include "stm32f10x_tim.h"
  27. #include "TypeDefine.h"
  28. #include "Driver.h"
  29. #include "USARTSetup.h"
  30. #include "ControlSystem.h"
  31. #include "SystemAlarm.h"
  32. #include "DrawLCDGUI.h"
  33. #include "lorawan.h"
  34. #include "stm32f10x_dma.h"
  35. #include <stdlib.h>
  36. #include <stdio.h>
  37. #include "Bubble_ADCSetup.h"
  38. #include "ControlSystem.h"
  39. #include "sys.h"
  40. uint16_t IC2Value;
  41. uint16_t DutyCycle;
  42. uint32_t Frequency;
  43. uint8_t EXPCA_flag=0;
  44. uint16_t Quiet_Timedata=0; //静音键延时时间
  45. uint8_t Quiet_Timedata_flag=0; //静音键延时完成标志
  46. extern uint8_t Sound_prepore_flag; //预报警标志
  47. uint16_t lorawan_overtime=0; //lorawan网络超时判断
  48. uint8_t lorawan_overtime_flag=0; //超时标志
  49. uint8_t time_1sflag=0; //1s时间标志
  50. uint8_t time_3sflag=0; //3秒时间标志
  51. uint16_t time_3s=0; //3s时间
  52. uint16_t lorawan_time_5s=0; //5s时间,发送数据后,收不到发送完成标志,延时3s进入睡眠模式
  53. uint8_t lorawan_time_5sflag=0; //5秒时间标志
  54. uint8_t test_flag=0;
  55. uint8_t self_check_finish=0; //自检完成标志
  56. uint32_t random_time=1750000; //随机发送时间
  57. uint16_t random_cont=0; //随机数种子值
  58. uint32_t random_data=0; //随机数
  59. uint8_t lorawan_send_finish_flag=0; //数据发送完成标志
  60. extern uint8_t lorawan_send_data_flag;////数据发送标志
  61. extern uart_recv_t uart_recv; //串口接收缓存 add by wulianwei
  62. /** @addtogroup STM32F10x_StdPeriph_Template
  63. * @{
  64. */
  65. /* Private typedef -----------------------------------------------------------*/
  66. /* Private define ------------------------------------------------------------*/
  67. /* Private macro -------------------------------------------------------------*/
  68. /* Private variables ---------------------------------------------------------*/
  69. /* Private function prototypes -----------------------------------------------*/
  70. /* Private functions ---------------------------------------------------------*/
  71. /******************************************************************************/
  72. /* Cortex-M3 Processor Exceptions Handlers */
  73. /******************************************************************************/
  74. /**
  75. * @brief This function handles NMI exception.
  76. * @param None
  77. * @retval None
  78. */
  79. void NMI_Handler(void)
  80. {
  81. }
  82. /**
  83. * @brief This function handles Hard Fault exception.
  84. * @param None
  85. * @retval None
  86. */
  87. void HardFault_Handler(void)
  88. {
  89. /* Go to infinite loop when Hard Fault exception occurs */
  90. while (1)
  91. {
  92. }
  93. }
  94. /**
  95. * @brief This function handles Memory Manage exception.
  96. * @param None
  97. * @retval None
  98. */
  99. void MemManage_Handler(void)
  100. {
  101. /* Go to infinite loop when Memory Manage exception occurs */
  102. while (1)
  103. {
  104. }
  105. }
  106. /**
  107. * @brief This function handles Bus Fault exception.
  108. * @param None
  109. * @retval None
  110. */
  111. void BusFault_Handler(void)
  112. {
  113. /* Go to infinite loop when Bus Fault exception occurs */
  114. while (1)
  115. {
  116. }
  117. }
  118. /**
  119. * @brief This function handles Usage Fault exception.
  120. * @param None
  121. * @retval None
  122. */
  123. void UsageFault_Handler(void)
  124. {
  125. /* Go to infinite loop when Usage Fault exception occurs */
  126. while (1)
  127. {
  128. }
  129. }
  130. /**
  131. * @brief This function handles SVCall exception.
  132. * @param None
  133. * @retval None
  134. */
  135. void SVC_Handler(void)
  136. {
  137. }
  138. /**
  139. * @brief This function handles Debug Monitor exception.
  140. * @param None
  141. * @retval None
  142. */
  143. void DebugMon_Handler(void)
  144. {
  145. }
  146. /**
  147. * @brief This function handles PendSVC exception.
  148. * @param None
  149. * @retval None
  150. */
  151. void PendSV_Handler(void)
  152. {
  153. }
  154. /**
  155. * @brief This function handles SysTick Handler.
  156. * @param None
  157. * @retval None
  158. */
  159. void SysTick_Handler(void)
  160. {
  161. if(( motorWorkState == MOTOR_WORK_OFF ) && (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)) //在所有中断里面处理电机停止,防止中断导致电机关闭延时
  162. {
  163. GPIO_SetBits(GPIOB,GPIO_Pin_13);
  164. }
  165. if( TaskSchedulerTimer.delayTimer != 0x00 )//延时函数计时
  166. {
  167. TaskSchedulerTimer.delayTimer--;
  168. }
  169. if(emSysWorkStep == EnterSetParam)
  170. {
  171. if((KeyActionFlag.keyEnter == emKeyflagLongPress)&&(TaskSchedulerFlag.EnterDelayFlag == TASK_FLAG_CLEAR))
  172. {
  173. if(TaskSchedulerTimer.EnterDelayTimer != 0)
  174. {
  175. TaskSchedulerTimer.EnterDelayTimer --;
  176. }
  177. else
  178. {
  179. TaskSchedulerFlag.EnterDelayFlag = TASK_FLAG_SET;
  180. }
  181. }
  182. else if(GPIO_ReadInputDataBit( KEY_GPIO_PORT,ENTER_GPIO_PIN ) != 0)//有问题,需要处理一下
  183. {
  184. TaskSchedulerTimer.EnterDelayTimer = EnterDelay_TIMER;
  185. TaskSchedulerFlag.EnterDelayFlag = TASK_FLAG_CLEAR;
  186. }
  187. }
  188. // else
  189. // {
  190. // TaskSchedulerTimer.EnterDelayTimer = THREE_MSEC_TIMER;
  191. // }
  192. if(lorawan_overtime-- < 2) //lorawan超时判断函数
  193. {
  194. lorawan_overtime_flag=1;
  195. lorawan_overtime=2000;
  196. }
  197. if(time_3s++ > 5000) //5s定时
  198. {
  199. time_3s=0;
  200. time_3sflag=1;
  201. }
  202. if(lorawan_send_data_flag ==1) //当发送数据后,开始计时5s
  203. {
  204. if(lorawan_time_5s++ > 5000) //5s定时 lorawan_time_3s
  205. {
  206. lorawan_time_5s=0;
  207. lorawan_time_5sflag=1;
  208. }
  209. }
  210. if(sysAlarmFlag.VoltLowest == ALARM_PREPARE) //低电量预报警计时器
  211. {
  212. if( Timer_VoltLowes != 0x00)
  213. {
  214. Timer_VoltLowes--;
  215. }
  216. else
  217. {
  218. Timer_VoltLowes = FORTY_MINUTE_TIMER;
  219. VoltLowest_Alarm_Flag = TASK_FLAG_SET;// //计时到,置位欠压报警标志
  220. }
  221. }
  222. if(lorawan_send_data_flag ==1)
  223. {
  224. if(GPIO_ReadInputDataBit(LORANODE_STAT_GPIO_PORT, LORANODE_STAT_PIN) == 1)
  225. {
  226. lorawan_send_finish_flag = 1; //当收到一个10ms脉冲的时候,说明数据发送完成
  227. }
  228. }
  229. /* 系统上电初始化定时3s */
  230. if( TaskSchedulerFlag.initFinishFlag == TASK_FLAG_WAIT )
  231. {
  232. if( TaskSchedulerTimer.initFinishTimer != 0x00 )
  233. {
  234. TaskSchedulerTimer.initFinishTimer--;
  235. }
  236. else
  237. {
  238. TaskSchedulerFlag.initFinishFlag = TASK_FLAG_SET;
  239. TaskSchedulerTimer.initFinishTimer = TRI_SECOND_TIMER;
  240. }
  241. }
  242. if( Quiet_Timedata > 0) //静音键延时
  243. {
  244. Quiet_Timedata--;
  245. }
  246. else
  247. {
  248. Quiet_Timedata = 1000;
  249. Quiet_Timedata_flag=1;
  250. time_1sflag=1;
  251. }
  252. /* 主芯片给从芯片发送数据时间 */ //目前改为喂狗时间用
  253. if( TaskSchedulerTimer.hostXmitTimer != 0x00 )
  254. {
  255. TaskSchedulerTimer.hostXmitTimer--;
  256. }
  257. else
  258. {
  259. TaskSchedulerTimer.hostXmitTimer = THREE_MSEC_TIMER;
  260. if(TaskSchedulerFlag.hostXmitFlag == TASK_FLAG_SET)
  261. {
  262. TaskSchedulerFlag.hostXmitFlag = TASK_FLAG_CLEAR;
  263. GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  264. }
  265. else
  266. {
  267. TaskSchedulerFlag.hostXmitFlag = TASK_FLAG_SET;
  268. GPIO_SetBits(GPIOC,GPIO_Pin_0);
  269. }
  270. }
  271. /* 时间读取计时 */
  272. if( TaskSchedulerTimer.timeReadTimer != 0x00 )
  273. {
  274. TaskSchedulerTimer.timeReadTimer--;
  275. }
  276. else
  277. {
  278. TaskSchedulerFlag.timeReadFlag = TASK_FLAG_SET;
  279. TaskSchedulerTimer.timeReadTimer = THIRTY_SECOND_TIMER;//ONE_SECOND_TIMER;
  280. // if( TaskSchedulerFlag.testDispFlag == TASK_FLAG_SET )
  281. // {
  282. // testDispCounts++;
  283. // }
  284. // else
  285. // {
  286. // testDispCounts = 0;
  287. // }
  288. }
  289. /* 自动关机计时 */
  290. /*if( TaskSchedulerFlag.autoPowerOffFlag == TASK_FLAG_WAIT )
  291. {
  292. if( TaskSchedulerTimer.autoPowerOffTimer != 0 )
  293. {
  294. TaskSchedulerTimer.autoPowerOffTimer--;
  295. }
  296. else
  297. {
  298. TaskSchedulerFlag.autoPowerOffFlag = TASK_FLAG_SET;
  299. TaskSchedulerTimer.autoPowerOffTimer = THIRTY_MINUTE_TIMER;
  300. }
  301. } */
  302. /*设置参数界面30min未操作报警提示*/
  303. if((TaskSchedulerFlag.NoActionHintFlag == TASK_FLAG_WAIT )&&(realTimeData.stateRun != Alarm))
  304. {
  305. if(TaskSchedulerTimer.NoActionHintTimer != 0)
  306. {
  307. TaskSchedulerTimer.NoActionHintTimer--;
  308. }
  309. else
  310. {
  311. TaskSchedulerFlag.NoActionHintFlag = TASK_FLAG_SET;
  312. TaskSchedulerTimer.NoActionHintTimer = THIRTY_MINUTE_TIMER;
  313. }
  314. }
  315. if( ( TaskSchedulerFlag.lcdBlackFlag == TASK_FLAG_SET ) || ( TaskSchedulerFlag.lcdBlackFlag == TASK_FLAG_WAIT ) )
  316. {
  317. if( TaskSchedulerTimer.lcdBlackCloseTimer != 0 )
  318. {
  319. TaskSchedulerTimer.lcdBlackCloseTimer--;
  320. }
  321. else
  322. {
  323. TaskSchedulerFlag.lcdBlackFlag = TASK_FLAG_CLEAR;//只要有按键按下背光就亮
  324. TaskSchedulerTimer.lcdBlackCloseTimer = FIFTEEN_SECOND_TIMER;//TWO_SECOND_TIMER;//LCD背光关闭计时
  325. }
  326. }
  327. /* 电机上电自检,只要是4s没有出现自检成功,则认为自检失败,自检完成后电机可进入正常工作状态 */
  328. if(TaskSchedulerFlag.motorSelfTestFlag == TASK_FLAG_WAIT)
  329. {
  330. if( TaskSchedulerTimer.motorSelfTestTimer != 0x00 )
  331. {
  332. TaskSchedulerTimer.motorSelfTestTimer--;
  333. }
  334. else
  335. {
  336. TaskSchedulerFlag.motorSelfTestFlag = TASK_FLAG_OVERTIME;
  337. TaskSchedulerTimer.motorSelfTestTimer = MOTOR_TESTSELF_TIMER;
  338. }
  339. }
  340. else if( TaskSchedulerFlag.motorSelfTestFlag == TASK_FLAG_SET )
  341. {
  342. /* 电机开始工作后停止InfusionStopTimer时间后再启动 */
  343. if( TaskSchedulerFlag.motorStopFlag == TASK_FLAG_WAIT )
  344. {
  345. if( TaskSchedulerTimer.motorStopTimer != 0x00 )
  346. {
  347. TaskSchedulerTimer.motorStopTimer--;
  348. }
  349. else
  350. {
  351. motorWorkState = MOTOR_WORK_ON;
  352. TaskSchedulerTimer.motorStopTimer = InfusionStopTimer;
  353. }
  354. }
  355. if(GPIO_ReadInputDataBit( GPIOB,GPIO_Pin_1 ) != 0) //绿色LED点亮时间处理
  356. {
  357. if( G_Led_Time != 0x00)
  358. {
  359. G_Led_Time--;
  360. }
  361. else
  362. {
  363. G_LED_OFF;//时间到关闭LED
  364. }
  365. }
  366. if(TaskSchedulerFlag.NoActionHintFlag == TASK_FLAG_WSET)
  367. {
  368. if(GPIO_ReadInputDataBit( GPIOB,GPIO_Pin_9 ) != 0) //绿色LED点亮时间处理
  369. {
  370. if( Y_Led_Time != 0x00)
  371. {
  372. Y_Led_Time--;
  373. TaskSchedulerFlag.lcdBlackFlag = TASK_FLAG_SET;
  374. }
  375. else
  376. {
  377. Y_LED_OFF;//时间到关闭LED
  378. TaskSchedulerFlag.NoActionHintFlag = TASK_FLAG_WAIT;
  379. TaskSchedulerFlag.lcdBlackFlag = TASK_FLAG_CLEAR;
  380. }
  381. }
  382. }
  383. //气泡检测传感器定时
  384. if( motorWorkState == MOTOR_WORK_ON )//在电机运行的时候进行检测
  385. {
  386. if(BubbleCheckTime != 0x00)
  387. {
  388. BubbleCheckTime--;
  389. }
  390. else
  391. {
  392. BubbleCheckFlag=1;//定时到,置位该标志
  393. BubbleCheckTime = TWO_MSEC_TIMER;
  394. }
  395. }
  396. //电流检测定时
  397. if( motorWorkState == MOTOR_WORK_ON )//在电机运行的时候进行检测
  398. {
  399. if(ElectricityCheckTime != 0x00)
  400. {
  401. ElectricityCheckTime--;
  402. }
  403. else
  404. {
  405. ElectricityCheckFlag=1;//定时到,置位该标志
  406. ElectricityCheckTime = FIFTY_MSEC_TIMER; //50ms检测一下
  407. }
  408. }
  409. //在电机关闭时,检测电流,防止电机失控
  410. if( motorWorkState == MOTOR_WORK_OFF )//在电机运行的时候进行检测
  411. {
  412. if(ElectricityOffTime != 0x00)
  413. {
  414. ElectricityOffTime--;
  415. }
  416. else
  417. {
  418. ElectricityOFFflag=1;//定时到,置位该标志
  419. ElectricityOffTime = ONE_SECOND_TIMER; //1s检测一下
  420. }
  421. }
  422. /* 非自检模式下当电机开始工作后,如果4s时间内霍尔没有收到采集信号,则说明电机操作失败 */
  423. if( TaskSchedulerFlag.motorRunFlag == TASK_FLAG_WAIT )
  424. {
  425. if( TaskSchedulerTimer.motorSignalCollectTimer != 0x00 )
  426. {
  427. TaskSchedulerTimer.motorSignalCollectTimer--;
  428. }
  429. else
  430. {
  431. TaskSchedulerFlag.motorRunFlag = TASK_FLAG_OVERTIME;
  432. TaskSchedulerTimer.motorSignalCollectTimer = MOTOR_TESTSELF_TIMER;
  433. }
  434. }
  435. /*else if( TaskSchedulerFlag.motorRunFlag == TASK_FLAG_SET )
  436. {
  437. TaskSchedulerTimer.motorSignalCollectTimer = MOTOR_TESTSELF_TIMER;
  438. }*/
  439. }
  440. if( TaskSchedulerFlag.forceConvertFlag == TASK_FLAG_WAIT )//压力AD采集
  441. {
  442. if( TaskSchedulerTimer.pressureConvertTimer != 0x00 )
  443. {
  444. TaskSchedulerTimer.pressureConvertTimer--;
  445. }
  446. else
  447. {
  448. TaskSchedulerFlag.forceConvertFlag = TASK_FLAG_SET;
  449. TaskSchedulerTimer.pressureConvertTimer = TASK_TIMER_PRES_CONV;
  450. }
  451. }
  452. //if( ( emSysWorkStep != EnterRunFirstDose ) && ( emSysWorkStep != EnterRunMain ) )//在非运行界面时每20s采集一次电池电压
  453. {
  454. if( TaskSchedulerFlag.sensorPWBatteryFlag == TASK_FLAG_CLEAR )//每20s关闭一次主芯片节能
  455. {
  456. if( TaskSchedulerTimer.batteryVoltTimer != 0 )
  457. {
  458. TaskSchedulerTimer.batteryVoltTimer--;
  459. }
  460. else
  461. {
  462. TaskSchedulerFlag.batteryVoltHeaderFlag = TASK_FLAG_SET;
  463. TaskSchedulerFlag.sensorPWBatteryFlag = TASK_FLAG_SET;//传感器电源-电压打开
  464. TaskSchedulerTimer.batteryVoltTimer = TWENTY_SECOND_TIMER;
  465. }
  466. }
  467. }
  468. if( TaskSchedulerTimer.rtdXmitTimer != 0 ) //实时数据发送计时 30s/帧
  469. {
  470. TaskSchedulerTimer.rtdXmitTimer--;
  471. }
  472. else//当所实时数据发送完毕后,关闭zigbee电源
  473. {
  474. /*if( TaskSchedulerFlag.zigbeeETXmitFlag == TASK_FLAG_WAIT )
  475. {
  476. TaskSchedulerFlag.zigbeeETXmitFlag = TASK_FLAG_SET;
  477. }
  478. else*/
  479. {
  480. TaskSchedulerFlag.zigbeeXmitFlag = TASK_FLAG_SET;
  481. RunToLorawawn_flag=1;
  482. }
  483. if(EngineeringModeValue.test == 0)
  484. {
  485. TaskSchedulerTimer.rtdXmitTimer = TWENTY_SECOND_TIMER;
  486. }
  487. else if(EngineeringModeValue.test == 1)
  488. {
  489. TaskSchedulerTimer.rtdXmitTimer = TWENTY_MINUTE_TIMER; //定时20分钟发送一次
  490. }
  491. srand(random_cont--);
  492. //random_data=(uint32_t)(rand()%1200001+3000);//从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;
  493. random_data=(uint32_t)(rand()%20001+3000);//从X到Y,有Y-X+1个数,所以要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X;
  494. random_time=random_data;
  495. }
  496. if( random_time != 0 ) //实时数据发送计时 30s/帧
  497. {
  498. random_time--;
  499. }
  500. else//当所实时数据发送完毕后,关闭zigbee电源
  501. {
  502. // TaskSchedulerFlag.zigbeeXmitFlag = TASK_FLAG_CLEAR;
  503. random_time=TWO_MINUTE_TIMER;//随机时间发送完成,赋予默认的3分钟,等待下一个三分钟随机时间
  504. // if( TaskSchedulerFlag.zigbeeETXmitFlag == TASK_FLAG_WAIT )
  505. // {
  506. // TaskSchedulerFlag.zigbeeETXmitFlag = TASK_FLAG_SET;
  507. // }
  508. // else
  509. // {
  510. // //TaskSchedulerFlag.zigbeeXmitFlag = TASK_FLAG_SET;
  511. // //RunToLorawawn_flag=1;
  512. // }
  513. }
  514. // ---- tcp 检测 add by wulianwei
  515. if( TaskSchedulerTimer.ModuleInitTimer != 0 ) //TCP检查时间
  516. {
  517. TaskSchedulerTimer.ModuleInitTimer--;
  518. }
  519. else
  520. {
  521. TaskSchedulerFlag.ModuleInitFlag = TASK_FLAG_SET;
  522. TaskSchedulerTimer.ModuleInitTimer = FIFTEEN_SECOND_TIMER;
  523. }
  524. if(TaskSchedulerTimer.MQTTSendTimer != 0)
  525. {
  526. TaskSchedulerTimer.MQTTSendTimer--;
  527. }
  528. else
  529. {
  530. TaskSchedulerFlag.MqttSendFlag = TASK_FLAG_SET; //add by wulianwei
  531. TaskSchedulerTimer.MQTTSendTimer = TWENTY_MINUTE_TIMER;
  532. if(EngineeringModeValue.test == 0)
  533. {
  534. TaskSchedulerTimer.MQTTSendTimer = TWENTY_SECOND_TIMER;
  535. }
  536. }
  537. if(TaskSchedulerTimer.MQTTReSendTimer != 0)
  538. {
  539. TaskSchedulerTimer.MQTTReSendTimer--;
  540. }
  541. else
  542. {
  543. TaskSchedulerFlag.MqttReSendFlag = TASK_FLAG_SET;
  544. TaskSchedulerTimer.MQTTReSendTimer = FIVE_SECOND_TIMER;
  545. }
  546. // ---- tcp 检测 add by wulianwei
  547. if( speakerWorkStep != emSpeakerNoneWork )
  548. {
  549. if( TaskSchedulerTimer.speakerTimer != 0x00 )//蜂鸣器计时
  550. {
  551. TaskSchedulerTimer.speakerTimer--;
  552. }
  553. else
  554. {
  555. /*if(( sysPromptToneType == WarringTone ) || ( sysPromptToneType == InfusionTone ) || ( sysPromptToneType == Sound_prepore ))
  556. {
  557. switch( speakerWorkStep )
  558. {
  559. case emSpeakerWorkStart:
  560. TaskSchedulerTimer.speakerTimer = ONE_MSEC_TIMER;//蜂鸣器计时 100ms
  561. speakerWorkStep = emSpeakerWorkStep1;
  562. SpeakerCtl( DRIVER_OFF );
  563. break;
  564. case emSpeakerWorkStep1:
  565. TaskSchedulerTimer.speakerTimer = TWO_MSEC_TIMER;//蜂鸣器计时 200ms
  566. speakerWorkStep = emSpeakerWorkStep2;
  567. SpeakerCtl( DRIVER_ON );
  568. break;
  569. case emSpeakerWorkStep2:
  570. TaskSchedulerTimer.speakerTimer = TWO_MSEC_TIMER;//蜂鸣器计时 200ms
  571. speakerWorkStep = emSpeakerWorkStep3;
  572. SpeakerCtl( DRIVER_OFF );
  573. break;
  574. case emSpeakerWorkStep3:
  575. TaskSchedulerTimer.speakerTimer = TWO_MSEC_TIMER;//蜂鸣器计时 200ms
  576. speakerWorkStep = emSpeakerWorkStep4;
  577. SpeakerCtl( DRIVER_ON );
  578. break;
  579. case emSpeakerWorkStep4:
  580. speakerWorkStep = emSpeakerWorkStep5;
  581. SpeakerCtl( DRIVER_OFF );
  582. break;
  583. default:break;
  584. }
  585. }
  586. else if(sysPromptToneType == RemindeTone)
  587. {
  588. switch( speakerWorkStep )
  589. {
  590. case emSpeakerWorkStart:
  591. TaskSchedulerTimer.speakerTimer = TWO_MSEC_TIMER;//蜂鸣器计时 200ms
  592. speakerWorkStep = emSpeakerWorkStep1;
  593. break;
  594. case emSpeakerWorkStep1:
  595. TaskSchedulerTimer.speakerTimer = TWO_MSEC_TIMER;//蜂鸣器计时 200ms
  596. speakerWorkStep = emSpeakerWorkStep2;
  597. break;
  598. case emSpeakerWorkStep2:
  599. speakerWorkStep = emSpeakerWorkStep3;
  600. break;
  601. }
  602. }*/
  603. // else
  604. if(( sysPromptToneType == StartupTone ) || ( sysPromptToneType == KeypadShortTone ) || ( sysPromptToneType == KeypadLongTone )
  605. || ( sysPromptToneType == VerificationTone )|| ( sysPromptToneType == SoundOff ))
  606. {
  607. speakerWorkStep = emSpeakerWorkDone;
  608. }
  609. }
  610. }
  611. if( sysAlarmFlag.VoltLowest == ALARM_PREPARE )
  612. //if( Sound_prepore_flag == 2)
  613. {
  614. if( TaskSchedulerTimer.batLowPrepareDispTimer != 0x00 )
  615. {
  616. TaskSchedulerTimer.batLowPrepareDispTimer--;
  617. }
  618. else
  619. {
  620. if( TaskSchedulerFlag.batLowPrepareFlag == TASK_FLAG_WCLEAR )//电池低压预报标志
  621. {
  622. TaskSchedulerFlag.batLowPrepareFlag = TASK_FLAG_SET;
  623. }
  624. else if( TaskSchedulerFlag.batLowPrepareFlag == TASK_FLAG_WSET )//电池低压预报标志
  625. {
  626. TaskSchedulerFlag.batLowPrepareFlag = TASK_FLAG_CLEAR;
  627. }
  628. TaskSchedulerTimer.batLowPrepareDispTimer = ONE_SECOND_TIMER;
  629. }
  630. }
  631. /* 整个控制系统的定时都在此处处理 */
  632. CntlSystemWorkTimer();
  633. if( LimitBeginsTime == 1 )
  634. {
  635. if( TaskSchedulerTimer.totalDoseOneHourTimer != 0 )
  636. {
  637. TaskSchedulerTimer.totalDoseOneHourTimer--;
  638. }
  639. else
  640. {
  641. TaskSchedulerTimer.totalDoseOneHourTimer = TWENTY_MINUTE_TIMER;
  642. TaskSchedulerFlag.limitJudgeFlag = TASK_FLAG_CLEAR;
  643. }
  644. }
  645. //为防止有同时按下的情况,所以没有将按键封装到一个程序里
  646. if( KeyScanStatus.keyEnter == emKeyActionWait )//enter键消抖和时长判断
  647. {
  648. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,ENTER_GPIO_PIN ) == 0)
  649. {
  650. if( TaskSchedulerTimer.enterKeyScanTimer != 0 )
  651. {
  652. TaskSchedulerTimer.enterKeyScanTimer--;
  653. }
  654. else
  655. {
  656. KeyScanStatus.keyEnter = emKyeActionScanSet;
  657. TaskSchedulerTimer.enterKeyScanTimer = KEY_TIMER_SCAN;
  658. }
  659. }
  660. else//按键抬起,表示此次按键操作完成
  661. {
  662. KeyScanStatus.keyEnter = emKeyActionOn;
  663. TaskSchedulerTimer.enterKeyScanTimer = KEY_TIMER_SCAN;
  664. }
  665. }
  666. if( KeyScanStatus.keyRunPause == emKeyActionWait )//运行/暂停键消抖和时长判断
  667. {
  668. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,RUNPAUSE_GPIO_PIN ) == 0)
  669. {
  670. if( TaskSchedulerTimer.runPauseKeyScanTimer != 0 )
  671. {
  672. TaskSchedulerTimer.runPauseKeyScanTimer--;
  673. }
  674. else
  675. {
  676. KeyScanStatus.keyRunPause = emKyeActionScanSet;
  677. TaskSchedulerTimer.runPauseKeyScanTimer = KEY_TIMER_SCAN;
  678. }
  679. }
  680. else//按键抬起,表示此次按键操作完成
  681. {
  682. KeyScanStatus.keyRunPause = emKeyActionOn;
  683. TaskSchedulerTimer.runPauseKeyScanTimer = KEY_TIMER_SCAN;
  684. }
  685. }
  686. if( KeyScanStatus.keyPS == emKeyActionWait )//密码/静音键消抖和时长判断
  687. {
  688. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,PS_GPIO_PIN ) == 0)//还没有定义,引脚需要修改
  689. {
  690. if( TaskSchedulerTimer.psKeyScanTimer != 0 )
  691. {
  692. TaskSchedulerTimer.psKeyScanTimer--;
  693. }
  694. else
  695. {
  696. KeyScanStatus.keyPS = emKyeActionScanSet;
  697. TaskSchedulerTimer.psKeyScanTimer = KEY_TIMER_SCAN;
  698. }
  699. }
  700. else//按键抬起,表示此次按键操作完成
  701. {
  702. KeyScanStatus.keyPS = emKeyActionOn;
  703. TaskSchedulerTimer.psKeyScanTimer = KEY_TIMER_SCAN;
  704. }
  705. }
  706. if( KeyScanStatus.keyPower == emKeyActionWait )//电源键消抖和时长判断
  707. {
  708. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,PWR_GPIO_PIN ) == 0)
  709. {
  710. if( TaskSchedulerTimer.powerKeyScanTimer != 0 )
  711. {
  712. TaskSchedulerTimer.powerKeyScanTimer--;
  713. }
  714. else
  715. {
  716. KeyScanStatus.keyPower = emKyeActionScanSet;
  717. TaskSchedulerTimer.powerKeyScanTimer = KEY_TIMER_SCAN;
  718. }
  719. }
  720. else//按键抬起,表示此次按键操作完成
  721. {
  722. KeyScanStatus.keyPower = emKeyActionOn;
  723. TaskSchedulerTimer.powerKeyScanTimer = KEY_TIMER_SCAN;
  724. }
  725. }
  726. if( KeyScanStatus.keyPCA == emKeyActionWait )//PCA键消抖和时长判断
  727. {
  728. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,PAC_GPIO_PIN ) == 0 )
  729. {
  730. if( TaskSchedulerTimer.pcaKeyScanTimer != 0 )
  731. {
  732. TaskSchedulerTimer.pcaKeyScanTimer--;
  733. }
  734. else
  735. {
  736. KeyScanStatus.keyPCA = emKyeActionScanSet;
  737. TaskSchedulerTimer.pcaKeyScanTimer = KEY_TIMER_SCAN;
  738. }
  739. }
  740. else//按键抬起,表示此次按键操作完成
  741. {
  742. KeyScanStatus.keyPCA = emKeyActionOn;
  743. TaskSchedulerTimer.pcaKeyScanTimer = KEY_TIMER_SCAN;
  744. }
  745. }
  746. /*else//PCA扩展键消抖和时长判断
  747. {
  748. if( GPIO_ReadInputDataBit( GPIOB,EXPAC_GPIO_PIN ) == 0 )
  749. {
  750. if( TaskSchedulerTimer.pcaKeyScanTimer != 0 )
  751. {
  752. TaskSchedulerTimer.pcaKeyScanTimer--;
  753. if( TaskSchedulerTimer.pcaKeyScanTimer < 10)//20170503修改
  754. {
  755. if( GPIO_ReadInputDataBit( GPIOB,EXPAC_GPIO_PIN ) == 0 )
  756. {
  757. EXPCA_flag=1;
  758. }
  759. }
  760. }
  761. }
  762. else if(EXPCA_flag==1)
  763. {
  764. EXPCA_flag=0;
  765. KeyScanStatus.keyPCA = emKyeActionScanSet;
  766. TaskSchedulerTimer.pcaKeyScanTimer = KEY_TIMER_SCAN;
  767. }
  768. }*/
  769. if( KeyScanStatus.keyPlus == emKeyActionWait )//Plus键消抖和时长判断
  770. {
  771. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,PLUS_GPIO_PIN ) == 0 )
  772. {
  773. if( TaskSchedulerTimer.plusKeyScanTimer != 0 )
  774. {
  775. TaskSchedulerTimer.plusKeyScanTimer--;
  776. }
  777. else
  778. {
  779. KeyScanQty.keyPlus++;
  780. KeyScanStatus.keyPlus = emKyeActionScanSet;
  781. TaskSchedulerTimer.plusKeyScanTimer = KEY_TIMER_SCAN;
  782. }
  783. }
  784. else//按键抬起,表示此次按键操作完成
  785. {
  786. KeyScanStatus.keyPlus = emKeyActionOn;
  787. TaskSchedulerTimer.plusKeyScanTimer = KEY_TIMER_SCAN;
  788. }
  789. }
  790. else if( MoreKeyActionFlag.keyPlus == emKeyflagShortPress )
  791. {
  792. if( TaskSchedulerTimer.plusKeyScanTimer != 0 )
  793. {
  794. TaskSchedulerTimer.plusKeyScanTimer--;
  795. }
  796. else
  797. {
  798. MoreKeyActionFlag.keyPlus = emKeyflagNonePress;
  799. TaskSchedulerTimer.plusKeyScanTimer = KEY_TIMER_SCAN;
  800. }
  801. }
  802. if( KeyScanStatus.keyMinus == emKeyActionWait )//Minus键消抖和时长判断
  803. {
  804. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,MINUS_GPIO_PIN ) == 0 )
  805. {
  806. if( TaskSchedulerTimer.minusKeyScanTimer != 0 )
  807. {
  808. TaskSchedulerTimer.minusKeyScanTimer--;
  809. }
  810. else
  811. {
  812. KeyScanStatus.keyMinus = emKyeActionScanSet;
  813. TaskSchedulerTimer.minusKeyScanTimer = KEY_TIMER_SCAN;
  814. }
  815. }
  816. else//按键抬起,表示此次按键操作完成
  817. {
  818. KeyScanStatus.keyMinus = emKeyActionOn;
  819. TaskSchedulerTimer.minusKeyScanTimer = KEY_TIMER_SCAN;
  820. }
  821. }
  822. else if( MoreKeyActionFlag.keyMinus == emKeyflagShortPress )
  823. {
  824. if( TaskSchedulerTimer.minusKeyScanTimer != 0 )
  825. {
  826. TaskSchedulerTimer.minusKeyScanTimer--;
  827. }
  828. else
  829. {
  830. MoreKeyActionFlag.keyMinus = emKeyflagNonePress;
  831. TaskSchedulerTimer.minusKeyScanTimer = KEY_TIMER_SCAN;
  832. }
  833. }
  834. if( KeyScanStatus.keyAirout == emKeyActionWait )//Airout键消抖和时长判断
  835. {
  836. if( GPIO_ReadInputDataBit( KEY_GPIO_PORT,AIROUT_GPIO_PIN ) == 0 )
  837. {
  838. if( TaskSchedulerTimer.airoutKeyScanTimer != 0 )
  839. {
  840. TaskSchedulerTimer.airoutKeyScanTimer--;
  841. }
  842. else
  843. {
  844. KeyScanStatus.keyAirout = emKyeActionScanSet;
  845. TaskSchedulerTimer.airoutKeyScanTimer = KEY_TIMER_SCAN;
  846. }
  847. }
  848. else//按键抬起,表示此次按键操作完成
  849. {
  850. KeyScanStatus.keyAirout = emKeyActionOn;
  851. TaskSchedulerTimer.airoutKeyScanTimer = KEY_TIMER_SCAN;
  852. }
  853. }
  854. if( TaskSchedulerFlag.speakerFlag == TASK_FLAG_WAIT )
  855. {
  856. if( TaskSchedulerTimer.speakerWaitTimer != 0 )
  857. {
  858. TaskSchedulerTimer.speakerWaitTimer--;
  859. }
  860. else
  861. {
  862. if((SysHornToneType == RemindeTone )||(SysHornToneType == LowPriWarning)||(SysHornToneType == Sound_prepore))
  863. {
  864. SysHornToneType = SoundOff;
  865. }
  866. TaskSchedulerFlag.speakerFlag = TASK_FLAG_SET;
  867. TaskSchedulerTimer.speakerWaitTimer = THIRTY_SECOND_TIMER;//为下次进入蜂鸣器计时做准备
  868. }
  869. }
  870. /* if( TaskSchedulerFlag.sysStandbyFlag == TASK_FLAG_WAIT )
  871. {
  872. if( TaskSchedulerTimer.sysStandbyTimer != 0 )
  873. {
  874. TaskSchedulerTimer.sysStandbyTimer--;
  875. }
  876. else
  877. {
  878. TaskSchedulerFlag.sysStandbyFlag = TASK_FLAG_SET;//开启待机模式
  879. TaskSchedulerFlag.sensorPWHallFlag = TASK_FLAG_CLEAR;//传感器电源-霍尔关闭
  880. }
  881. }*/
  882. }
  883. void EXTI1_IRQHandler(void)
  884. {
  885. /* if(EXTI_GetITStatus(HALL1_DETECT_EXTI) != RESET)//HALL1中断
  886. {
  887. if( ( TaskSchedulerFlag.sensorPWHallFlag == TASK_FLAG_SET ) && ( motorWorkState == MOTOR_WORK_ON ) )
  888. {
  889. if( TaskSchedulerFlag.motorSelfTestFlag == TASK_FLAG_WAIT )//上电电机自检
  890. {
  891. realTimeData.hall1Counter++;
  892. }
  893. else if( TaskSchedulerFlag.motorSelfTestFlag == TASK_FLAG_SET )
  894. {
  895. realTimeData.hall1Counter++;
  896. }
  897. }
  898. //Clear EXTI Line Pending Bit
  899. EXTI_ClearFlag(HALL1_DETECT_EXTI);
  900. EXTI_ClearITPendingBit(HALL1_DETECT_EXTI);
  901. }*/
  902. }
  903. /**
  904. * @brief This function handles the PECAHead detection interrupt request.
  905. * @param None
  906. * @retval None
  907. */
  908. void EXTI9_5_IRQHandler(void)
  909. {
  910. if(EXTI_GetITStatus(HALL2_DETECT_EXTI) != RESET)//HALL2中断
  911. {
  912. if( ( TaskSchedulerFlag.sensorPWHallFlag == TASK_FLAG_SET ) && ( motorWorkState == MOTOR_WORK_ON ) )
  913. {
  914. if( TaskSchedulerFlag.motorSelfTestFlag == TASK_FLAG_WAIT )//上电电机自检
  915. {
  916. realTimeData.hall2Counter++;
  917. //电机自检成功,只让电机转到一圈并且归零起点,自检OK
  918. if( realTimeData.hall2Counter >= 1 )
  919. {
  920. realTimeData.hall2Counter = 0;
  921. GPIO_SetBits(GPIOB,GPIO_Pin_13);
  922. motorWorkState = MOTOR_WORK_OFF;
  923. TaskSchedulerFlag.motorSelfTestFlag = TASK_FLAG_SET;
  924. self_check_finish=1;
  925. ElectricityOffTime = ONE_SECOND_TIMER; //1s检测一下
  926. ElectricityOFFflag=0;//定时到,置位该标志
  927. TaskSchedulerTimer.dispAutoJumpTimer = TRI_SECOND_TIMER;
  928. }
  929. }
  930. else if( TaskSchedulerFlag.motorSelfTestFlag == TASK_FLAG_SET )
  931. {
  932. realTimeData.hall2Counter++;
  933. if( realTimeData.hall2Counter >= 2 )
  934. {
  935. realTimeData.hall2Counter = 0;
  936. if((realTimeData.stateRun == Airout)&&(TaskSchedulerFlag.AirOutFlag == TASK_FLAG_SET))
  937. {
  938. motorWorkState = MOTOR_WORK_ON;
  939. }
  940. else
  941. // if((realTimeData.stateRun == FirstRun)||(realTimeData.stateRun==MainRun)||(realTimeData.stateRun==PCARun))
  942. {
  943. motorWorkState = MOTOR_WORK_OFF;
  944. GPIO_SetBits(GPIOB,GPIO_Pin_13);
  945. }
  946. TaskSchedulerTimer.motorSignalCollectTimer = MOTOR_TESTSELF_TIMER;//机械故障时间赋值
  947. TaskSchedulerFlag.ipnutFlag = TASK_FLAG_SET;//这个标志位应该用在hall1采集到一次变化的时候
  948. }
  949. }
  950. }
  951. /* Clear EXTI Line Pending Bit */
  952. EXTI_ClearFlag(HALL2_DETECT_EXTI);
  953. EXTI_ClearITPendingBit(HALL2_DETECT_EXTI);
  954. }
  955. // if(EXTI_GetITStatus(EXPAC_DETECT_EXTI) != RESET)//PCA扩展控制中断
  956. // {
  957. // if( KeyScanStatus.keyPCA == emKeyActionOff )
  958. // {
  959. // KeyScanStatus.keyPCA = emKeyActionWait;
  960. // }
  961. // /* Clear EXTI Line Pending Bit */
  962. // EXTI_ClearFlag(EXPAC_DETECT_EXTI);
  963. // EXTI_ClearITPendingBit(EXPAC_DETECT_EXTI);
  964. // }
  965. // if(EXTI_GetITStatus(PAC_DETECT_EXTI) != RESET)//PCA控制中断
  966. // {
  967. // if( KeyScanStatus.keyPCA == emKeyActionOff )
  968. // {
  969. // KeyScanStatus.keyPCA = emKeyActionWait;
  970. // }
  971. // /* Clear EXTI Line Pending Bit */
  972. // EXTI_ClearFlag(PAC_DETECT_EXTI);
  973. // EXTI_ClearITPendingBit(PAC_DETECT_EXTI);
  974. // }
  975. // if(EXTI_GetITStatus(AIROUT_DETECT_EXTI) != RESET)//Airout控制中断
  976. // {
  977. // if( KeyScanStatus.keyAirout == emKeyActionOff )
  978. // {
  979. // KeyScanStatus.keyAirout = emKeyActionWait;
  980. // }
  981. // /* Clear EXTI Line Pending Bit */
  982. // EXTI_ClearFlag(AIROUT_DETECT_EXTI);
  983. // EXTI_ClearITPendingBit(AIROUT_DETECT_EXTI);
  984. // }
  985. if(EXTI_GetITStatus(PAC_DETECT_EXTI) != RESET)//PCA控制中断
  986. {
  987. if( KeyScanStatus.keyPCA == emKeyActionOff )
  988. {
  989. KeyScanStatus.keyPCA = emKeyActionWait;
  990. }
  991. /* Clear EXTI Line Pending Bit */
  992. EXTI_ClearFlag(PAC_DETECT_EXTI);
  993. EXTI_ClearITPendingBit(PAC_DETECT_EXTI);
  994. }
  995. if(EXTI_GetITStatus(RUNPAUSE_DETECT_EXTI) != RESET)//运行/停止控制中断
  996. {
  997. if( KeyScanStatus.keyRunPause == emKeyActionOff )
  998. {
  999. KeyScanStatus.keyRunPause = emKeyActionWait;
  1000. }
  1001. /* Clear EXTI Line Pending Bit */
  1002. EXTI_ClearFlag(RUNPAUSE_DETECT_EXTI);
  1003. EXTI_ClearITPendingBit(RUNPAUSE_DETECT_EXTI);
  1004. }
  1005. }
  1006. /**
  1007. * @brief This function handles the PECAHead detection interrupt request.
  1008. * @param None
  1009. * @retval None
  1010. */
  1011. void EXTI15_10_IRQHandler(void)
  1012. {
  1013. if(( motorWorkState == MOTOR_WORK_OFF ) && (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)) //在所有中断里面处理电机停止,防止中断导致电机关闭延时
  1014. {
  1015. GPIO_SetBits(GPIOB,GPIO_Pin_13);
  1016. }
  1017. // if(EXTI_GetITStatus(RUNPAUSE_DETECT_EXTI) != RESET)//运行/停止控制中断
  1018. // {
  1019. // if( KeyScanStatus.keyRunPause == emKeyActionOff )
  1020. // {
  1021. // KeyScanStatus.keyRunPause = emKeyActionWait;
  1022. // }
  1023. // /* Clear EXTI Line Pending Bit */
  1024. // EXTI_ClearFlag(RUNPAUSE_DETECT_EXTI);
  1025. // EXTI_ClearITPendingBit(RUNPAUSE_DETECT_EXTI);
  1026. // }
  1027. // if(EXTI_GetITStatus(MINUS_DETECT_EXTI) != RESET)//减控制中断
  1028. // {
  1029. // if( KeyScanStatus.keyMinus == emKeyActionOff )
  1030. // {
  1031. // KeyScanStatus.keyMinus = emKeyActionWait;
  1032. // }
  1033. // /* Clear EXTI Line Pending Bit */
  1034. // EXTI_ClearFlag(MINUS_DETECT_EXTI);
  1035. // EXTI_ClearITPendingBit(MINUS_DETECT_EXTI);
  1036. // }
  1037. // if(EXTI_GetITStatus(PLUS_DETECT_EXTI) != RESET)//加控制中断
  1038. // {
  1039. // if( KeyScanStatus.keyPlus == emKeyActionOff )
  1040. // {
  1041. // KeyScanStatus.keyPlus = emKeyActionWait;
  1042. // }
  1043. // /* Clear EXTI Line Pending Bit */
  1044. // EXTI_ClearFlag(PLUS_DETECT_EXTI);
  1045. // EXTI_ClearITPendingBit(PLUS_DETECT_EXTI);
  1046. // }
  1047. // if(EXTI_GetITStatus(PS_DETECT_EXTI) != RESET)//返回键控制中断
  1048. // {
  1049. // if( KeyScanStatus.keyPS == emKeyActionOff )
  1050. // {
  1051. // KeyScanStatus.keyPS = emKeyActionWait;
  1052. // }
  1053. // /* Clear EXTI Line Pending Bit */
  1054. // EXTI_ClearFlag(PS_DETECT_EXTI);
  1055. // EXTI_ClearITPendingBit(PS_DETECT_EXTI);
  1056. // }
  1057. // if(EXTI_GetITStatus(ENTER_DETECT_EXTI) != RESET)//ENTER控制中断
  1058. // {
  1059. // if( KeyScanStatus.keyEnter == emKeyActionOff )
  1060. // {
  1061. // KeyScanStatus.keyEnter = emKeyActionWait;
  1062. // }
  1063. // /* Clear EXTI Line Pending Bit */
  1064. // EXTI_ClearFlag(ENTER_DETECT_EXTI);
  1065. // EXTI_ClearITPendingBit(ENTER_DETECT_EXTI);
  1066. // }
  1067. // if(EXTI_GetITStatus(PWR_DETECT_EXTI) != RESET)//电源控制中断
  1068. // {
  1069. // if( KeyScanStatus.keyPower == emKeyActionOff )
  1070. // {
  1071. // KeyScanStatus.keyPower = emKeyActionWait;
  1072. // }
  1073. // /* Clear EXTI Line Pending Bit */
  1074. // EXTI_ClearFlag(PWR_DETECT_EXTI);
  1075. // EXTI_ClearITPendingBit(PWR_DETECT_EXTI);
  1076. // }
  1077. if(EXTI_GetITStatus(AIROUT_DETECT_EXTI) != RESET)//Airout控制中断
  1078. {
  1079. if( KeyScanStatus.keyAirout == emKeyActionOff )
  1080. {
  1081. KeyScanStatus.keyAirout = emKeyActionWait;
  1082. }
  1083. /* Clear EXTI Line Pending Bit */
  1084. EXTI_ClearFlag(AIROUT_DETECT_EXTI);
  1085. EXTI_ClearITPendingBit(AIROUT_DETECT_EXTI);
  1086. }
  1087. if(EXTI_GetITStatus(MINUS_DETECT_EXTI) != RESET)//减控制中断
  1088. {
  1089. if( KeyScanStatus.keyMinus == emKeyActionOff )
  1090. {
  1091. KeyScanStatus.keyMinus = emKeyActionWait;
  1092. }
  1093. /* Clear EXTI Line Pending Bit */
  1094. EXTI_ClearFlag(MINUS_DETECT_EXTI);
  1095. EXTI_ClearITPendingBit(MINUS_DETECT_EXTI);
  1096. }
  1097. if(EXTI_GetITStatus(PLUS_DETECT_EXTI) != RESET)//加控制中断
  1098. {
  1099. if( KeyScanStatus.keyPlus == emKeyActionOff )
  1100. {
  1101. KeyScanStatus.keyPlus = emKeyActionWait;
  1102. }
  1103. /* Clear EXTI Line Pending Bit */
  1104. EXTI_ClearFlag(PLUS_DETECT_EXTI);
  1105. EXTI_ClearITPendingBit(PLUS_DETECT_EXTI);
  1106. }
  1107. if(EXTI_GetITStatus(PS_DETECT_EXTI) != RESET)//密码/静音控制中断
  1108. {
  1109. if( KeyScanStatus.keyPS == emKeyActionOff )
  1110. {
  1111. KeyScanStatus.keyPS = emKeyActionWait;
  1112. }
  1113. /* Clear EXTI Line Pending Bit */
  1114. EXTI_ClearFlag(PS_DETECT_EXTI);
  1115. EXTI_ClearITPendingBit(PS_DETECT_EXTI);
  1116. }
  1117. if(EXTI_GetITStatus(ENTER_DETECT_EXTI) != RESET)//ENTER控制中断
  1118. {
  1119. if( KeyScanStatus.keyEnter == emKeyActionOff )
  1120. {
  1121. KeyScanStatus.keyEnter = emKeyActionWait;
  1122. }
  1123. /* Clear EXTI Line Pending Bit */
  1124. EXTI_ClearFlag(ENTER_DETECT_EXTI);
  1125. EXTI_ClearITPendingBit(ENTER_DETECT_EXTI);
  1126. }
  1127. if(EXTI_GetITStatus(PWR_DETECT_EXTI) != RESET)//电源控制中断
  1128. {
  1129. if( KeyScanStatus.keyPower == emKeyActionOff )
  1130. {
  1131. KeyScanStatus.keyPower = emKeyActionWait;
  1132. }
  1133. /* Clear EXTI Line Pending Bit */
  1134. EXTI_ClearFlag(PWR_DETECT_EXTI);
  1135. EXTI_ClearITPendingBit(PWR_DETECT_EXTI);
  1136. }
  1137. }
  1138. /**
  1139. * @brief This function handles RTC_IRQHandler.
  1140. * @param None
  1141. * @retval None
  1142. */
  1143. // void RTC_IRQHandler(void)
  1144. // {
  1145. // if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)//闹钟中断
  1146. // {
  1147. // RTC_ClearITPendingBit(RTC_IT_ALR); //清闹钟中断
  1148. // }
  1149. // }
  1150. /**
  1151. * @brief This function handles USART1_IRQHandler.
  1152. * @param None
  1153. * @retval None
  1154. */
  1155. void USART1_IRQHandler(void)
  1156. {
  1157. if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
  1158. {
  1159. //接收中断
  1160. usart1RecvBuffer[usart1RecvCnt] = (uint8_t)USART_ReceiveData(USART1); //保存一个字节
  1161. if( usart1RecvBuffer[0] == USART_PDU_START )
  1162. {
  1163. if( usart1RecvCnt < ( usart1RecvBuffer[1] + 2 ) )
  1164. {
  1165. usart1RecvCnt++;
  1166. }
  1167. else if( usart1RecvBuffer[usart1RecvCnt] == USART_PDU_END )
  1168. {
  1169. usart1RecvCnt = 0;
  1170. TaskSchedulerFlag.historyRequestFlag = TASK_FLAG_SET;
  1171. }
  1172. else
  1173. {
  1174. usart1RecvCnt = 0;
  1175. }
  1176. }
  1177. }
  1178. }
  1179. //==========================================================
  1180. // 函数名称: USART2_IRQHandler replace USART2_IRQHandler by wulianwei
  1181. //
  1182. // 函数功能: 串口2收发中断
  1183. //
  1184. // 入口参数: 无
  1185. //
  1186. // 返回参数: 无
  1187. //
  1188. // 说明:
  1189. void USART2_IRQHandler(void)
  1190. {
  1191. if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断
  1192. {
  1193. if(uart_recv.len >= sizeof(uart_recv.buf)-1) uart_recv.len = 0; //防止串口被刷爆
  1194. uart_recv.buf[uart_recv.len++] = USART2->DR;
  1195. USART_ClearFlag(USART2, USART_FLAG_RXNE);
  1196. }
  1197. }
  1198. /**
  1199. * @brief This function handles USART2_IRQHandler.
  1200. * @param None
  1201. * @retval None
  1202. */
  1203. void USART2_IRQHandler1(void) // rename USART2_IRQHandler by wulianwei
  1204. {
  1205. /*
  1206. if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)
  1207. {
  1208. // uint8_t Dmabuff_lenght=0;
  1209. uint8_t i=0,data=0;
  1210. USART_ClearITPendingBit(USART2,USART_IT_IDLE ); //清除空闲中断
  1211. data = USART1->SR;
  1212. USART_ReceiveData(USART2); //读DR,只有读过一次,才能真正清除标志
  1213. USART_ClearFlag(USART2,USART_IT_IDLE); //清除空闲标志
  1214. //DMA_Cmd(DMA1_Channel6,DISABLE);
  1215. //USART1Send(usart2RecvBuffer,usart2RecvCnt);
  1216. //DMA_Cmd(DMA1_Channel6,ENABLE);
  1217. //usart2RecvCnt=0;
  1218. }
  1219. */
  1220. if(( motorWorkState == MOTOR_WORK_OFF ) && (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)) //在所有中断里面处理电机停止,防止中断导致电机关闭延时
  1221. {
  1222. GPIO_SetBits(GPIOB,GPIO_Pin_13);
  1223. }
  1224. if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
  1225. {
  1226. //接收中断
  1227. USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  1228. usart2RecvBuffer[usart2RecvCnt++] = (uint8_t)USART_ReceiveData(USART2); //保存一个字节
  1229. if(usart2RecvBuffer[0] == 0xad)
  1230. {
  1231. if(usart2RecvCnt<2)
  1232. return;
  1233. if(usart2RecvBuffer[1] == 0xfc)
  1234. {
  1235. if( usart2RecvCnt >5)
  1236. {
  1237. USART1Send(usart2RecvBuffer,usart2RecvCnt);
  1238. usart2RecvCnt=0;
  1239. TaskSchedulerFlag.zigbeeRecvFlag = TASK_FLAG_SET;
  1240. //printf("OK \r\n");
  1241. }
  1242. }
  1243. else
  1244. {
  1245. usart2RecvCnt = 0;
  1246. printf("%x\r\n",usart2RecvBuffer[1]);
  1247. }
  1248. }
  1249. else
  1250. {
  1251. usart2RecvCnt = 0;
  1252. }
  1253. /*if( usart2RecvBuffer[1] == 0x7c )
  1254. {
  1255. //printf("a=%x\r\n",usart2RecvBuffer[1]);
  1256. if( usart2RecvCnt >= 3 )
  1257. {
  1258. usart2RecvCnt = 0;
  1259. //TaskSchedulerFlag.zigbeeRecvFlag = TASK_FLAG_SET;
  1260. //printf("%x\r\n",usart2RecvBuffer[0]);
  1261. //printf("%x\r\n",usart2RecvBuffer[1]);
  1262. //USART1Send(usart2RecvBuffer,3);
  1263. } */
  1264. }
  1265. }
  1266. /**
  1267. * @brief This function handles USART2_IRQHandler.
  1268. * @param None
  1269. * @retval None
  1270. */
  1271. void USART3_IRQHandler(void)
  1272. {
  1273. if(USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
  1274. {
  1275. //接收中断
  1276. usart3RecvBuffer[usart3RecvCnt++] = (uint8_t)USART_ReceiveData(USART3); //保存一个字节
  1277. if( ( usart3RecvBuffer[0] == USART_PDU_START ) && ( usart3RecvBuffer[1] == USART_PDU_END ) )
  1278. {
  1279. if( usart3RecvCnt >= ( usart3RecvBuffer[2] + 3 ) )
  1280. {
  1281. usart3RecvCnt = 0;
  1282. }
  1283. }
  1284. else
  1285. {
  1286. if( usart3RecvCnt >= 2)
  1287. {
  1288. usart3RecvCnt = 0;
  1289. }
  1290. }
  1291. }
  1292. }
  1293. /******************************************************************************/
  1294. /* STM32F10x Peripherals Interrupt Handlers */
  1295. /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
  1296. /* available peripheral interrupt handler's name please refer to the startup */
  1297. /* file (startup_stm32f10x_xx.s). */
  1298. /******************************************************************************/
  1299. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/