main.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. #include "main.h"
  2. #include "sram.h"
  3. #include "nandflash.h"
  4. #include "usart.h"
  5. #include "malloc.h"
  6. #include "demo_nand_fatfs.h"
  7. #include "cjson.h"
  8. #include "delay.h"
  9. #include "string.h"
  10. #include "includes.h"
  11. #include "lwip/timers.h"
  12. #include "led.h"
  13. #include "sys_tcpdemo.h"
  14. #include "sys_mqtt.h"
  15. #include "sys_http.h"
  16. #include "task.h"
  17. #include "sys_sx1278.h"
  18. #include "node_data_acquisition.h"
  19. <<<<<<< HEAD
  20. =======
  21. #include "log.h"
  22. #include "tcp_server.h"
  23. <<<<<<< HEAD
  24. >>>>>>> d2b00294f64b161364915ae9082f104a2f26e39c
  25. =======
  26. #include "lte.h"
  27. >>>>>>> 59516250cca2e8da62941a123b11f78ecf895415
  28. #define UNIQUE_ID 0x1fff7a10
  29. /*关于任务优先级分配(上限为12个、需要增加请修改上限)
  30. * 0: 保留
  31. * 1: 用于ucos的软件定时器
  32. * 2: 保留
  33. * 3: 用于 以太网的网卡数据包读取 ETHERNETIF_THREAD_PRO
  34. * 4: LWIP 核心线程 TCPIP_THREAD_PRIO
  35. * 5: 用于 ota升级
  36. * 6: 用于 MQTT数据发送线程 APP_TASK_MQTTMAIN_PRIO
  37. * 7: 用于 MQTT数据接收线程 APP_TASK_MQTTRECEIVE_PRIO
  38. * 8: 用于 sx1278发送/接收处理数据 DATA_TASK_PRIO
  39. * 9: 用于 本机状态led显示 / 现用于tcpServer_init TCP_TASK_PRIO /
  40. * 10:用于网络状态led显示
  41. * 11:用于轮询读出本机保存信息发送到sx1278发送接收线程
  42. * 12:用于管理所有线程
  43. */
  44. ///////////////////////////////////////
  45. #define PERIOD_TASK_PRIO 2
  46. #define PERIOD_STK_SIZE 2048
  47. OS_STK PERIOD_TASK_STK[PERIOD_STK_SIZE];
  48. void period_taskFuntcion(void *arg);
  49. //////////////////////////////////////////////
  50. //LED
  51. //LED优先级
  52. #define LED_TASK_PRIO 28
  53. //LED栈空间大小
  54. #define LED_STK_SIZE 128
  55. //任务堆栈
  56. OS_STK LED_TASK_STK[LED_STK_SIZE];
  57. //led运行任务
  58. void led_taskFuntcion(void *pdata);
  59. ////////////////////////////////////////////////////////
  60. /*---------------------------本地数据线程堆栈----------------------------------------------------------------*/
  61. __align(8) OS_STK DATA_TASK_STK[DATA_STK_SIZE];
  62. /*---------------------------lora通信线程堆栈----------------------------------------------------------------*/
  63. __align(8) OS_STK SX1278_TASK_STK[SX1278_STK_SIZE];
  64. void NVIC_Configuration(void);
  65. void load_unique(void);
  66. char gatewayId[11];
  67. int main(void)
  68. {
  69. int status;
  70. load_unique();
  71. sprintf(gatewayId,"DTtest0001");//DT8pd3ac6h DTbma5ac6h DTtest0001 DTrzts0001
  72. NVIC_Configuration();
  73. my_mem_init(SRAMEX);
  74. my_mem_init(SRAMIN);
  75. delay_init();
  76. //nandflash并不用初始化,调用fafts时会初始化
  77. NET_STATUS_LED_Config();
  78. USART_485_config();
  79. // USART_485_DE_TX();
  80. USART_232_config();
  81. <<<<<<< HEAD
  82. <<<<<<< HEAD
  83. NAND_Init();
  84. OSInit();
  85. //OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);
  86. OSTaskCreate(period_taskFuntcion,(void*)0,(OS_STK*)&PERIOD_TASK_STK[PERIOD_STK_SIZE-1],PERIOD_TASK_PRIO);
  87. OSTaskCreate(led_taskFuntcion,(void*)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);
  88. OSTaskCreate(data_task,(void*)0,(OS_STK*)&DATA_TASK_STK[DATA_STK_SIZE-1],DATA_TASK_PRIO);
  89. =======
  90. =======
  91. DEBUG_USART_Config();
  92. USART_DMA_Config();
  93. >>>>>>> 59516250cca2e8da62941a123b11f78ecf895415
  94. status = NAND_Init();
  95. while(status){
  96. NAND_Format();
  97. status = NAND_Init();
  98. }
  99. OSInit();
  100. #if 0
  101. //OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);
  102. OSTaskCreate(period_taskFuntcion,(void*)0,(OS_STK*)&PERIOD_TASK_STK[PERIOD_STK_SIZE-1],PERIOD_TASK_PRIO);
  103. OSTaskCreate(led_taskFuntcion,(void*)0,(OS_STK*)&LED_TASK_STK[LED_STK_SIZE-1],LED_TASK_PRIO);
  104. >>>>>>> d2b00294f64b161364915ae9082f104a2f26e39c
  105. OSTaskCreate(sx1278_send_task,(void *)0,(OS_STK*)&SX1278_TASK_STK[SX1278_STK_SIZE-1],SX1278_TASK_PRIO);
  106. #endif
  107. OSTaskCreate(period_taskFuntcion,(void*)0,(OS_STK*)&PERIOD_TASK_STK[PERIOD_STK_SIZE-1],PERIOD_TASK_PRIO);
  108. OSTaskCreate(data_task,(void*)0,(OS_STK*)&DATA_TASK_STK[DATA_STK_SIZE-1],DATA_TASK_PRIO);
  109. printf("system start \r\n");
  110. OSStart(); //ucos启动
  111. /* Infinite loop */
  112. while (1)
  113. {
  114. }
  115. }
  116. void period_taskFuntcion(void *arg)
  117. {
  118. OS_CPU_SR cpu_sr;
  119. #if OS_TASK_STAT_EN > 0u
  120. OSStatInit();
  121. #endif
  122. lwIP_Init();
  123. // 输出日志
  124. // log_init();
  125. // tcp_server_init();
  126. // LogPrint(LOG_INFO,__FILE__, __FUNCTION__, __LINE__, "system start");
  127. http_getDemo();
  128. http_postDemo();
  129. mqtt_threadCreate();
  130. OSTaskSuspend(OS_PRIO_SELF);
  131. }
  132. //测试任务
  133. void led_taskFuntcion(void *pdata)
  134. {
  135. int tms;
  136. while(1)
  137. {
  138. tms = hd_netledOpen();
  139. OSTimeDly(tms);
  140. tms = hd_netledClose();
  141. OSTimeDly(tms);
  142. }
  143. }
  144. void bsp_Idle(void)
  145. {
  146. /* --- 喂狗 */
  147. /* --- 让CPU进入休眠,由Systick定时中断唤醒或者其他中断唤醒 */
  148. }
  149. /**
  150. * @brief 配置嵌套向量中断控制器NVIC分组
  151. * @param 无
  152. * @retval 无
  153. */
  154. void NVIC_Configuration(void)
  155. {
  156. // NVIC_InitTypeDef NVIC_InitStructure;
  157. /* 嵌套向量中断控制器组选择 */
  158. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  159. }
  160. #ifdef USE_FULL_ASSERT
  161. /**
  162. * @brief Reports the name of the source file and the source line number
  163. * where the assert_param error has occurred.
  164. * @param file: pointer to the source file name
  165. * @param line: assert_param error line source number
  166. * @retval None
  167. */
  168. void assert_failed(uint8_t* file, uint32_t line)
  169. {
  170. /* User can add his own implementation to report the file name and line number,
  171. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  172. /* Infinite loop */
  173. // while (1)
  174. //{}
  175. }
  176. #endif
  177. /*
  178. * 函数名:void readID()
  179. * 输入参数:无
  180. * 输出参数:strId
  181. * 返回值:无
  182. * 函数作用:读取长度12的芯片Id并组合从中取出对应字符防止其重复
  183. */
  184. void load_unique(void)
  185. {
  186. char *hex_table = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN";
  187. uint32_t CpuID1, CpuID2, CpuID3;
  188. CpuID1 = *(volatile uint32_t *)(UNIQUE_ID);
  189. CpuID2 = *(volatile uint32_t *)(UNIQUE_ID+8);
  190. CpuID3 = *(volatile uint32_t *)(UNIQUE_ID+16);
  191. char strId[11];
  192. for (uint8_t i = 0, j = 0; i < 8; i += 2)
  193. {
  194. uint32_t sum1 = (CpuID1 >> ((j % 4) * 8)) & 0xFF; // 按字节取出
  195. uint8_t index1 = sum1 / 16;
  196. uint8_t remainder1 = sum1 % 16;
  197. uint32_t sum2 = (CpuID2 >> ((j % 4) * 8)) & 0xFF; // 按字节取出
  198. uint8_t index2 = sum2 / 16;
  199. uint8_t remainder2 = sum2 % 16;
  200. uint32_t sum3 = (CpuID3 >> ((j % 4) * 8)) & 0xFF; // 按字节取出
  201. uint8_t index3 = sum3 / 16;
  202. uint8_t remainder3 = sum3 % 16;
  203. strId[i + 2] = hex_table[index1 + index2 + index3];
  204. strId[i + 1 + 2] = hex_table[remainder1 + remainder2 + remainder3];
  205. j++;
  206. }
  207. strId[10] = '\0';
  208. strId[0]='L';
  209. strId[1]='R';
  210. strcpy(gatewayId,strId);
  211. }
  212. /*
  213. * 函数名:void load_232_config()
  214. * 输入参数:无
  215. * 输出参数:strId
  216. * 返回值:无
  217. * 函数作用:加载本地存储配置如果上位机配置过则不走http配置路线,防止两线冲突
  218. */