system_init.c 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. #include "system_init.h"
  2. #include "common.h"
  3. #include "can_data_handle.h"
  4. #include "usart_data_handle.h"
  5. #include "main_task.h"
  6. #include "main.h"
  7. #include "soft_can.h"
  8. #include "common.h"
  9. #include "soft_flash.h"
  10. #include "soft_can.h"
  11. #include "soft_version.h"
  12. #include "config.h"
  13. /**
  14. * @file thread_can_handle
  15. * @brief 初始化处理can线程
  16. * @param none
  17. * @details
  18. * @author Zhang Sir
  19. **/
  20. static struct rt_thread can_task;
  21. static rt_uint8_t can_task_stack[5120];
  22. void thread_can_handle()
  23. {
  24. rt_err_t result;
  25. result = rt_thread_init(&can_task,
  26. "cantask",
  27. thread_can_task_entry,
  28. RT_NULL,
  29. &can_task_stack[0],
  30. sizeof(can_task_stack),
  31. RT_THREAD_PRIORITY_MAX - 28,
  32. 100);
  33. if (result == RT_EOK)
  34. rt_thread_startup(&can_task);
  35. }
  36. /**
  37. * @file thread_usart_handle
  38. * @brief 初始化处理串口线程
  39. * @param none
  40. * @details
  41. * @author Zhang Sir
  42. **/
  43. static struct rt_thread usart_task;
  44. static rt_uint8_t usart_task_stack[5120];
  45. void thread_usart_handle()
  46. {
  47. rt_err_t result;
  48. result = rt_thread_init(&usart_task,
  49. "usarttask",
  50. thread_usart_task_entry,
  51. RT_NULL,
  52. &usart_task_stack[0],
  53. sizeof(usart_task_stack),
  54. RT_THREAD_PRIORITY_MAX - 28,
  55. 100);
  56. if (result == RT_EOK)
  57. rt_thread_startup(&usart_task);
  58. }
  59. /**
  60. * @file thread_task_handle
  61. * @brief 初始化处理主任务线程
  62. * @param none
  63. * @details
  64. * @author Zhang Sir
  65. **/
  66. static struct rt_thread main_task;
  67. static rt_uint8_t main_task_stack[5120];
  68. void thread_task_handle()
  69. {
  70. rt_err_t result;
  71. result = rt_thread_init(&main_task,
  72. "maintask",
  73. thread_main_task_handle,
  74. RT_NULL,
  75. &main_task_stack[0],
  76. sizeof(main_task_stack),
  77. RT_THREAD_PRIORITY_MAX - 27,
  78. 100);
  79. if (result == RT_EOK)
  80. rt_thread_startup(&main_task);
  81. }
  82. /**
  83. * @file creat_sem_init
  84. * @brief 初始化处理主任务线程
  85. * @param none
  86. * @details
  87. * @author Zhang Sir
  88. **/
  89. struct rt_semaphore uart1_sem;
  90. struct rt_semaphore can1_sem;
  91. struct rt_semaphore can2_sem;
  92. void creat_sem_init(void)
  93. {
  94. rt_err_t result = 0;
  95. result = rt_sem_init(&uart1_sem, "usartsem", 0, RT_IPC_FLAG_FIFO);
  96. if (result != RT_EOK)
  97. {
  98. //rt_kprintf("init uart sem failed.\n");
  99. return;
  100. }
  101. // result = rt_sem_init(&can1_sem, "can1sem", 0, RT_IPC_FLAG_FIFO);
  102. // if (result != RT_EOK)
  103. // {
  104. // //rt_kprintf("init can1 sem failed.\n");
  105. // return;
  106. // }
  107. // result = rt_sem_init(&can2_sem, "can2sem", 0, RT_IPC_FLAG_FIFO);
  108. // if (result != RT_EOK)
  109. // {
  110. // //rt_kprintf("init can2 sem failed.\n");
  111. // return;
  112. // }
  113. }
  114. /**
  115. * @file user_init
  116. * @brief 用户系统初始化
  117. * @param none
  118. * @details
  119. * @author Zhang Sir
  120. **/
  121. uint8_t can1_buffer[1024];
  122. uint8_t can2_buffer[1024];
  123. uint8_t uart_buffer[512];
  124. uint8_t send_uart_buffer[1024];
  125. rkfifo_t uart_rkfifo;
  126. rkfifo_t can1_rkfifo;
  127. rkfifo_t can2_rkfifo;
  128. rkfifo_t send_uart_rkfifo;
  129. extern UART_HandleTypeDef huart1;
  130. extern CAN_HandleTypeDef hcan1;
  131. extern CAN_HandleTypeDef hcan2;
  132. void user_init(void)
  133. {
  134. //串口初始化
  135. __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  136. HAL_UART_Receive_DMA(&huart1, (uint8_t *)FMU_uart_buf, MAX_UART_BUF);
  137. __HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
  138. //CAN1初始化
  139. CAN1_filter_init();
  140. //HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
  141. // __HAL_CAN_ENABLE_IT(&hcan1, CAN_IT_ERROR | CAN_IT_ERROR_WARNING | CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE);
  142. __HAL_CAN_ENABLE_IT(&hcan1, CAN_IT_RX_FIFO0_FULL | CAN_IT_RX_FIFO0_OVERRUN);
  143. HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
  144. HAL_CAN_Start(&hcan1);
  145. HAL_GPIO_WritePin(GPIOC, C0_CAN1_ENABLE_Pin, GPIO_PIN_RESET);
  146. //CAN2初始化
  147. CAN2_filter_init();
  148. //HAL_NVIC_EnableIRQ(CAN2_SCE_IRQn);
  149. // __HAL_CAN_ENABLE_IT(&hcan2, CAN_IT_ERROR | CAN_IT_ERROR_WARNING | CAN_IT_ERROR_PASSIVE | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE);
  150. __HAL_CAN_ENABLE_IT(&hcan2, CAN_IT_RX_FIFO1_FULL | CAN_IT_RX_FIFO1_OVERRUN);
  151. HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING);
  152. HAL_CAN_Start(&hcan2);
  153. HAL_GPIO_WritePin(GPIOC, C9_CAN2_ENABLE_Pin, GPIO_PIN_RESET);
  154. //PWM初始化
  155. // 开启PWM
  156. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); //pump
  157. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); //pump
  158. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //nozzle
  159. HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); //nozzle
  160. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); //nozzle
  161. HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2); //nozzle
  162. // 设置占空比
  163. __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 1000); // 1
  164. __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 1000); // 2
  165. __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 1000); // 3
  166. __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 1000); // 4
  167. __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, 1000); // 4
  168. __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_2, 1000); // 4
  169. //定时器4初始化
  170. HAL_TIM_Base_Start_IT(&htim4);
  171. HAL_TIM_Base_Start(&htim4);
  172. //rkfifo初始化
  173. rkfifo_init(&uart_rkfifo, uart_buffer, sizeof(uart_buffer), 1);
  174. //rkfifo_init(&can1_rkfifo, can1_buffer, sizeof(can1_buffer), 1);
  175. //rkfifo_init(&can2_rkfifo, can2_buffer, sizeof(can2_buffer), 1);
  176. rkfifo_init(&send_uart_rkfifo, send_uart_buffer, sizeof(send_uart_buffer), 1);
  177. //读flash
  178. flash_init();
  179. //注册PMU
  180. Int2String(cur_par.pmu_serial,dev_pmu.sn,9);
  181. Int2String(APP_VERSION,dev_pmu.soft_serial,6);
  182. regist_dev_info(&dev_pmu,DEVICE_PMU,false,dev_pmu.sn,9,dev_pmu.soft_serial,6,NULL,0,"vk",3);
  183. }