freertos.c 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * File Name : freertos.c
  5. * Description : Code for freertos applications
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2023 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. /* USER CODE END Header */
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "FreeRTOS.h"
  21. #include "task.h"
  22. #include "main.h"
  23. #include "cmsis_os.h"
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. #include "usart.h"
  27. #include "adc.h"
  28. #include "gpio.h"
  29. /* USER CODE END Includes */
  30. /* Private typedef -----------------------------------------------------------*/
  31. /* USER CODE BEGIN PTD */
  32. /* USER CODE END PTD */
  33. /* Private define ------------------------------------------------------------*/
  34. /* USER CODE BEGIN PD */
  35. /* USER CODE END PD */
  36. /* Private macro -------------------------------------------------------------*/
  37. /* USER CODE BEGIN PM */
  38. /* USER CODE END PM */
  39. /* Private variables ---------------------------------------------------------*/
  40. /* USER CODE BEGIN Variables */
  41. #ifdef iap_
  42. typedef struct _T2C_RemoteCaliData
  43. {
  44. uint16_t FrameHead; //帧头 0-1
  45. uint32_t AddrExtModule; //4字节扩展地址 2--5
  46. uint16_t FunctionCode; //功能码2字节 只能是0x0003、0x0006或者0x0010 6--7
  47. uint16_t AddrRegStart; //寄存器起始地址2字节:合法范围为0x0000~0xffff 8--9
  48. uint16_t NumberOfRegs; //数据个数2字节:最多读取0xffff字节;实际取决于终端限制,目前为256字节 10--11
  49. uint32_t ReserveData001; //保留字4字节 12--15
  50. uint8_t PayLoadData[44+32+32]; //有效载荷具体有三种:44,或者76字节,或者108字节;字节 16--59
  51. uint16_t ReserveData002; //保留字2字节 60--61
  52. uint16_t CheckSum; //校验2字节 62--63
  53. }sT2C_RemoteCaliDat;
  54. typedef struct{
  55. uint16_t USE_RKG; //控制器占用人孔盖总线
  56. uint16_t USE_XYF; //控制器占用卸油阀总线
  57. uint16_t KZQ_ErrorCnt; //校验错误计数
  58. uint16_t KZQ_Error; //控制器通信错误
  59. uint8_t sensor_addr; //操作的传感器地址
  60. uint8_t sensor_RW; //操作的传感器读写属性
  61. uint16_t sensor_reg; //操作的传感器寄存器地址,即功能码
  62. uint8_t sensor_datelen; //操作数据长度
  63. uint8_t data_buf[70]; //下发数据缓存
  64. }KZQ_Inf;
  65. #define ADDR_Is_In_ElecFence 0x05D0 // 1488 车是否在电子围栏内
  66. sT2C_RemoteCaliDat T2C_RemoteCaliDat001 =
  67. {
  68. 0x3901,
  69. 0x9551000,
  70. 0x0003,
  71. ADDR_Is_In_ElecFence,//0x0000,
  72. 0x0001, //操作的数据个数
  73. 0x55AA55AA, //保留字4字节
  74. {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,\
  75. 25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44},
  76. 0x7788,//保留字2字节
  77. 0x99AA //校验2字节
  78. };
  79. sT2C_RemoteCaliDat *pT2C_RemoteCaliData = &T2C_RemoteCaliDat001;
  80. uint8_t CMD_KZQ[256] =
  81. {0x39,0x01,0x95,0x50,0x00,0x01,0x00,0x03,
  82. 0x00,0x00,0x00,0x00,0x95,0x05,0xAA,0xAA,
  83. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  84. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  88. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  89. };
  90. int flagU2Rx=0;
  91. int data_lengthU2;
  92. uint8_t* ptx = CMD_KZQ;
  93. uint16_t ModbusCRC = 0;
  94. uint16_t SetSuccess = 0;
  95. uint16_t ModbusCRC1 = 0;
  96. uint16_t SetSuccess1 = 0;
  97. uint16_t SetSuccess2 = 0;
  98. uint16_t SetSuccess3 = 0;
  99. int i000;
  100. uint8_t* send_ptr;
  101. uint16_t send_len;
  102. uint32_t tmpU32;
  103. KZQ_Inf kzq_inf;
  104. KZQ_Inf* pkzq = &kzq_inf;
  105. uint8_t USART2_RX_BUF003[128];
  106. uint8_t F_STATE[70] = {0};
  107. uint8_t ptxCang01Temp[150];
  108. uint32_t KZQ_RTerror = 0;
  109. void RstCPU(void)
  110. {
  111. uint16_t j;
  112. __disable_irq();
  113. HAL_NVIC_SystemReset();
  114. while(1)
  115. {
  116. __disable_irq();
  117. NVIC_SystemReset();
  118. while(j --)
  119. {
  120. __nop(); __nop(); __nop(); __nop();
  121. }
  122. }
  123. }
  124. #endif
  125. /* USER CODE END Variables */
  126. osThreadId iapTaskHandle;
  127. osThreadId myTask02Handle;
  128. osThreadId myTask03Handle;
  129. osThreadId myTask04Handle;
  130. /* Private function prototypes -----------------------------------------------*/
  131. /* USER CODE BEGIN FunctionPrototypes */
  132. /* USER CODE END FunctionPrototypes */
  133. void StartiapTask(void const * argument);
  134. void StartTask02(void const * argument);
  135. void StartTask03(void const * argument);
  136. void StartTask04(void const * argument);
  137. void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
  138. /* GetIdleTaskMemory prototype (linked to static allocation support) */
  139. void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
  140. /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
  141. static StaticTask_t xIdleTaskTCBBuffer;
  142. static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
  143. void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
  144. {
  145. *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;
  146. *ppxIdleTaskStackBuffer = &xIdleStack[0];
  147. *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
  148. /* place for user code */
  149. }
  150. /* USER CODE END GET_IDLE_TASK_MEMORY */
  151. /**
  152. * @brief FreeRTOS initialization
  153. * @param None
  154. * @retval None
  155. */
  156. void MX_FREERTOS_Init(void) {
  157. /* USER CODE BEGIN Init */
  158. /* USER CODE END Init */
  159. /* USER CODE BEGIN RTOS_MUTEX */
  160. /* add mutexes, ... */
  161. /* USER CODE END RTOS_MUTEX */
  162. /* USER CODE BEGIN RTOS_SEMAPHORES */
  163. /* add semaphores, ... */
  164. /* USER CODE END RTOS_SEMAPHORES */
  165. /* USER CODE BEGIN RTOS_TIMERS */
  166. /* start timers, add new ones, ... */
  167. /* USER CODE END RTOS_TIMERS */
  168. /* USER CODE BEGIN RTOS_QUEUES */
  169. /* add queues, ... */
  170. /* USER CODE END RTOS_QUEUES */
  171. /* Create the thread(s) */
  172. /* definition and creation of iapTask */
  173. osThreadDef(iapTask, StartiapTask, osPriorityRealtime, 0, 128);
  174. iapTaskHandle = osThreadCreate(osThread(iapTask), NULL);
  175. /* definition and creation of myTask02 */
  176. osThreadDef(myTask02, StartTask02, osPriorityRealtime, 0, 128);
  177. myTask02Handle = osThreadCreate(osThread(myTask02), NULL);
  178. /* definition and creation of myTask03 */
  179. osThreadDef(myTask03, StartTask03, osPriorityRealtime, 0, 128);
  180. myTask03Handle = osThreadCreate(osThread(myTask03), NULL);
  181. /* definition and creation of myTask04 */
  182. osThreadDef(myTask04, StartTask04, osPriorityRealtime, 0, 128);
  183. myTask04Handle = osThreadCreate(osThread(myTask04), NULL);
  184. /* USER CODE BEGIN RTOS_THREADS */
  185. /* add threads, ... */
  186. /* USER CODE END RTOS_THREADS */
  187. }
  188. /* USER CODE BEGIN Header_StartiapTask */
  189. /**
  190. * @brief Function implementing the iapTask thread.
  191. * @param argument: Not used
  192. * @retval None
  193. */
  194. /* USER CODE END Header_StartiapTask */
  195. void StartiapTask(void const * argument)
  196. {
  197. /* USER CODE BEGIN StartiapTask */
  198. /* Infinite loop */
  199. for(;;)
  200. {
  201. osDelay(1);
  202. #ifdef iap_
  203. if ((data_lengthU2 > 300) || flagU2Rx == 1) {
  204. flagU2Rx = 0;
  205. if ((USART2_RX_BUF002[0] == 0xA5) && (USART2_RX_BUF002[1] == 0x5A))
  206. {
  207. tmpU32 = (USART2_RX_BUF002[0] << 24) | (USART2_RX_BUF002[1] << 16) | (USART2_RX_BUF002[2] << 8) | (USART2_RX_BUF002[3]);
  208. if (StartBytes_IAP == tmpU32)
  209. {
  210. Process_CMD_IAP_Update();
  211. continue;
  212. }
  213. }
  214. }
  215. #endif
  216. }
  217. /* USER CODE END StartiapTask */
  218. }
  219. /* USER CODE BEGIN Header_StartTask02 */
  220. /**
  221. * @brief Function implementing the myTask02 thread.
  222. * @param argument: Not used
  223. * @retval None
  224. */
  225. /* USER CODE END Header_StartTask02 */
  226. void StartTask02(void const * argument)
  227. {
  228. /* USER CODE BEGIN StartTask02 */
  229. /* Infinite loop */
  230. for(;;)
  231. {
  232. osDelay(1);
  233. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
  234. HAL_Delay(1);
  235. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
  236. gpioaStatus = GetPaInputStatus();
  237. gpiobStatus = GetPbOutputStatus();
  238. GetADCResults(&hadc1);
  239. }
  240. /* USER CODE END StartTask02 */
  241. }
  242. /* USER CODE BEGIN Header_StartTask03 */
  243. /**
  244. * @brief Function implementing the myTask03 thread.
  245. * @param argument: Not used
  246. * @retval None
  247. */
  248. /* USER CODE END Header_StartTask03 */
  249. void StartTask03(void const * argument)
  250. {
  251. /* USER CODE BEGIN StartTask03 */
  252. /* Infinite loop */
  253. for(;;)
  254. {
  255. osDelay(1);
  256. ModBus();
  257. }
  258. /* USER CODE END StartTask03 */
  259. }
  260. /* USER CODE BEGIN Header_StartTask04 */
  261. /**
  262. * @brief Function implementing the myTask04 thread.
  263. * @param argument: Not used
  264. * @retval None
  265. */
  266. /* USER CODE END Header_StartTask04 */
  267. void StartTask04(void const * argument)
  268. {
  269. /* USER CODE BEGIN StartTask04 */
  270. /* Infinite loop */
  271. for(;;)
  272. {
  273. osDelay(1);
  274. }
  275. /* USER CODE END StartTask04 */
  276. }
  277. /* Private application code --------------------------------------------------*/
  278. /* USER CODE BEGIN Application */
  279. /* USER CODE END Application */