main.c 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. /*
  2. *********************************************************************************************************
  3. * 函 数 名: main
  4. * 功能说明: c程序入口
  5. * 形 参:无
  6. * 返 回 值: 错误代码(无需处理)
  7. *********************************************************************************************************
  8. */
  9. #include "main.h"
  10. #include "bsp_fatfs.h"
  11. void DumpHEX(uint8_t *buffer, uint32_t len)
  12. {
  13. uint32_t i;
  14. printf("[DumpHEX]Length:%d ", len);
  15. for (i = 0; i < len; i++)
  16. {
  17. if (i % 16 == 0)
  18. printf("\r\n");
  19. else if (i % 8 == 0)
  20. printf(" ");
  21. else
  22. printf(":");
  23. printf("%02x", buffer[i]);
  24. }
  25. printf("\r\n");
  26. }
  27. int main(void)
  28. {
  29. #if 0
  30. /* 打开GOIOI 端口时钟 */
  31. *(unsigned int *)(0x40023800 + 0x30) |= (1 << 8);
  32. /* PI10 为输出 */
  33. *(unsigned int *)(0x40022000 + 0x00) &= ~((0x03) << (2 * 10));
  34. *(unsigned int *)(0x40022000 + 0x00) |= (1 << (2 * 10));
  35. /* PI10 输出高电平 */
  36. *(unsigned int *)(0x40022000 + 0x14) |= (1 << 10);
  37. /* PI10 输出低电平 */
  38. *(unsigned int *)(0x40022000 + 0x14) &= ~(1 << 10);
  39. #elif 0
  40. bsp_init();
  41. while (1)
  42. {
  43. GPIO_ResetBits(GPIOI, GPIO_Pin_10);
  44. Delay(0xFFFFFFFF);
  45. // GPIO_SetBits(GPIOI, GPIO_Pin_10);
  46. // Delay(0xFFFFFFFF);
  47. GPIO_ResetBits(GPIOF, GPIO_Pin_7);
  48. Delay(0xFFFFFF);
  49. // GPIO_SetBits(GPIOF, GPIO_Pin_7);
  50. // Delay(0xFFFFFF);
  51. GPIO_ResetBits(GPIOF, GPIO_Pin_8);
  52. Delay(0xFFFFFF);
  53. // GPIO_SetBits(GPIOF, GPIO_Pin_8);
  54. // Delay(0xFFFFFF);
  55. GPIO_ResetBits(GPIOC, GPIO_Pin_2);
  56. Delay(0xFFFFFF);
  57. // GPIO_SetBits(GPIOC, GPIO_Pin_2);
  58. // Delay(0xFFFFFF);
  59. };
  60. #elif 1
  61. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  62. OSInit();
  63. bsp_init();
  64. RegisterIec10x();
  65. /* init task */
  66. /* 创建一个启动任务(也就是主任务)。启动任务会创建所有的应用程序任务 */
  67. OSTaskCreateExt(init_task, /* 启动任务函数指针 */
  68. (void *)0, /* 传递给任务的参数 */
  69. (OS_STK *)&init_task_stk[INIT_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  70. INIT_TASK_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  71. INIT_TASK_PRIO, /* 任务ID,一般和任务优先级相同 */
  72. (OS_STK *)&init_task_stk[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH
  73. 决定堆栈增长方向 */
  74. INIT_STK_SIZE, /* 任务栈大小 */
  75. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  76. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  77. OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 任务选项字 */
  78. OSStart();
  79. #endif
  80. }
  81. /*!
  82. \brief init task
  83. \param[in] pvParameters not used
  84. \param[out] none
  85. \retval none
  86. */
  87. void init_task(void *pvParameters)
  88. {
  89. uint8_t *p;
  90. p = pvParameters;
  91. SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC);
  92. /* configure the systick handler priority */
  93. NVIC_SetPriority(SysTick_IRQn, 0x00U);
  94. OSTaskCreateExt((void (*)(void *))misc_task, /* 启动任务函数指针 */
  95. (void *)0, /* 传递给任务的参数 */
  96. (OS_STK *)&misc_task_stk[MISC_TASK_STK_SIZE - 1], /* 指向任务栈栈顶的指针 */
  97. (INT8U)MISC_PRIO, /* 任务的优先级,必须唯一,数字越低优先级越高 */
  98. (INT16U)MISC_PRIO, /* 任务ID,一般和任务优先级相同 */
  99. (OS_STK *)&misc_task_stk[0], /* 指向任务栈栈底的指针。OS_STK_GROWTH 决定堆栈增长方向 */
  100. (INT32U)MISC_TASK_STK_SIZE, /* 任务栈大小 */
  101. (void *)0, /* 一块用户内存区的指针,用于任务控制块TCB的扩展功能
  102. (如任务切换时保存CPU浮点寄存器的数据)。一般不用,填0即可 */
  103. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP); /* 任务选项字 */
  104. // OSTaskCreateExt((void (*)(void *))modbus_master_task,
  105. // (void *)0,
  106. // (OS_STK *)&uart1_task_stk[UART1_TASK_STK_SIZE - 1],
  107. // (INT8U)UART1_TASK_PRIO,
  108. // (INT16U)UART1_TASK_PRIO,
  109. // (OS_STK *)&uart1_task_stk[0],
  110. // (INT32U)UART1_TASK_STK_SIZE,
  111. // (void *)0,
  112. // (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  113. /* 485 modbus从机模式 */
  114. OSTaskCreateExt((void (*)(void *))modbus_slave_task,
  115. (void *)0,
  116. (OS_STK *)&uart3_task_stk[UART3_TASK_STK_SIZE - 1],
  117. (INT8U)UART3_TASK_PRIO,
  118. (INT16U)UART3_TASK_PRIO,
  119. (OS_STK *)&uart3_task_stk[0],
  120. (INT32U)UART3_TASK_STK_SIZE,
  121. (void *)0,
  122. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  123. OSTaskCreateExt((void (*)(void *))net_task,
  124. (void *)0,
  125. (OS_STK *)&net_task_stk[NET_TASK_STK_SIZE - 1],
  126. (INT8U)NET_PRIO,
  127. (INT16U)NET_PRIO,
  128. (OS_STK *)&net_task_stk[0],
  129. (INT32U)NET_TASK_STK_SIZE,
  130. (void *)0,
  131. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  132. /* ESP8266 STA任务*/
  133. OSTaskCreateExt((void (*)(void *))esp_8266_task,
  134. (void *)0,
  135. (OS_STK *)&uart6_task_stk[UART6_TASK_STK_SIZE - 1],
  136. (INT8U)UART6_TASK_PRIO,
  137. (INT16U)UART6_TASK_PRIO,
  138. (OS_STK *)&uart6_task_stk[0],
  139. (INT32U)UART6_TASK_STK_SIZE,
  140. (void *)0,
  141. (INT16U)OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR | OS_TASK_OPT_SAVE_FP);
  142. }
  143. void misc_task(void)
  144. {
  145. INT8U cnt = 0;
  146. INT16U save_cnt = 0;
  147. INT8U temperature;
  148. INT8U humidity;
  149. INT8U ret;
  150. // INT8U key_state;
  151. AD7606_SetOS(AD_OS_NO); /* 无过采样 */
  152. AD7606_SetInputRange(0); /* 0表示输入量程为正负5V, 1表示正负10V */
  153. // bsp_StartAutoTimer(0, 500); /* 启动1个200ms的自动重装的定时器 */
  154. AD7606_ReadNowAdc(); /* 读取采样结果 */
  155. AD7606_StartConvst(); /* 启动1次转换 */
  156. while (1)
  157. {
  158. iwdg_feed(MISC_DOG);
  159. // key_scan();
  160. USBH_Process(&USB_OTG_Core, &USB_Host);
  161. // key_state = key_get();
  162. // if (key_state != KEY_NONE)
  163. // {
  164. // switch (key_state)
  165. // {
  166. // case KEY_1_UP:
  167. // printf("1111111\r\n");
  168. // break;
  169. // case KEY_1_DOWN:
  170. // printf("wwwwwwwwwwww\r\n");
  171. // break;
  172. // case KEY_1_LONG:
  173. // printf("333333333\r\n");
  174. // break;
  175. // default:
  176. // printf("44444444\r\n");
  177. // break;
  178. // }
  179. // }
  180. if ((cnt % 10 == 0) && (cnt != 0))
  181. {
  182. // printf("%ld\r\n", NAND_ReadID());
  183. // printf("%c\r\n", NOR_ReadByte(0x4000));
  184. }
  185. if ((cnt % 25 == 0) && (cnt != 0))
  186. {
  187. // printf("%ld\r\n", NAND_ReadID());
  188. LED2_RUN_TOGGLE;
  189. }
  190. if ((cnt % 15 == 0) && (cnt != 0))
  191. {
  192. // if (NOR_EraseSector(0x4000) == 0)
  193. // {
  194. // NOR_WriteByte(0x4000, 0xFF);
  195. // }
  196. }
  197. if (cnt == 10)
  198. {
  199. // if (am2303_init())
  200. // {
  201. // printf("error\r\n");
  202. // }
  203. // else
  204. // {
  205. ret = am2303_read_data(&temperature, &humidity); //读取温湿度值
  206. // if (ret == 1)
  207. // {
  208. // printf("Temp: (%d).\n", temperature);
  209. // printf("Humi: (%d).\n", humidity);
  210. // }
  211. // else
  212. // {
  213. // printf("\r\n未发现DHT11温湿度传感器\r\n");
  214. // }
  215. // }
  216. }
  217. if (cnt >= 25)
  218. {
  219. /* 每隔500ms 进来一次. 由软件启动转换 */
  220. AD7606_ReadNowAdc(); /* 读取采样结果 */
  221. AD7606_StartConvst(); /* 启动下次转换 */
  222. cnt = 0; /* 刷新显示 */
  223. }
  224. else
  225. {
  226. cnt++;
  227. }
  228. if (save_cnt >= 25)
  229. {
  230. save_cnt = 0;
  231. }
  232. else
  233. {
  234. save_cnt++;
  235. }
  236. OSTimeDly(20);
  237. };
  238. }