main.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "stm32f4xx.h"
  2. #include "wdg.h"
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "common_config.h"
  6. #include "settings_api.h"
  7. #include "cJSON.h"
  8. #include "gpio.h"
  9. #include "main.h"
  10. #include "init_task.h"
  11. #include "log.h"
  12. #include "spi_flash.h"
  13. static cJSON_Hooks cjson_hooks = {
  14. pvPortMalloc,
  15. vPortFree
  16. };
  17. // crude libc compatibility
  18. int __errno;
  19. /* Размещение стека FreeRTOS в CCRAM */
  20. #if defined ( __ICCARM__ )
  21. #pragma location = ".sram"
  22. uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
  23. #else
  24. uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] __attribute__ ((section (".mb1text")));
  25. /* Секция размещения СRC прошивки */
  26. uint32_t crc __attribute__ ((section (".crc"))) = 0xAABBCCDD;
  27. /* Секция размещения HW ревизии платы */
  28. char hw_rev[HW_REV_LEN] __attribute__ ((section (".hw_rev"))) = HW_REV;
  29. #endif
  30. void vApplicationTickHook(void)
  31. {
  32. }
  33. int main()
  34. {
  35. TIM_Cmd(TIM13, DISABLE);
  36. TIM_ClearITPendingBit(TIM13, TIM_IT_Update);
  37. __disable_irq();
  38. NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000);
  39. NVIC_SetPriorityGrouping(0);
  40. NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
  41. __enable_irq();
  42. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
  43. /* Clear flash error flags if were set */
  44. FLASH_ClearFlag(FLASH_FLAG_PGPERR);
  45. FLASH_ClearFlag(FLASH_FLAG_PGSERR);
  46. #ifndef DEBUG
  47. if (FLASH_OB_GetRDP() != SET) {
  48. FLASH_Unlock(); // this line is critical!
  49. FLASH_OB_Unlock();
  50. FLASH_OB_RDPConfig(OB_RDP_Level_1);
  51. FLASH_OB_Launch(); // Option Bytes programming
  52. FLASH_OB_Lock();
  53. FLASH_Lock();
  54. }
  55. #endif
  56. cJSON_InitHooks(&cjson_hooks);
  57. gpio_init();
  58. WDG_Init();
  59. spi_flash_init();
  60. //log_init(false);
  61. //log_test();
  62. //spi_flash_test();
  63. // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  64. init_settings();
  65. xTaskCreate( InitTask, "InitTask", 1000, NULL, tskIDLE_PRIORITY, NULL);
  66. // xTaskCreate( InitTask, "InitTask", 6000, NULL, tskIDLE_PRIORITY, NULL);
  67. vTaskStartScheduler();
  68. return 0;
  69. /*while(1)
  70. {
  71. }*/
  72. }