stm32f4-uart-bootloader

Simple UART bootloader for STM32F4 MCU's
git clone git://git.mdnr.space/stm32f4-uart-bootloader
Log | Files | Refs | Submodules | README | LICENSE

app.c (1545B)


      1 #include "app/os.h"
      2 #include "libopencm3/cm3/scb.h"
      3 #include "shared/protocol.h"
      4 #include "shared/mem-blocks.h"
      5 #include "shared/drv-gpio.h"
      6 #include "shared/drv-rcc.h"
      7 #include "shared/drv-usart-dma.h"
      8 #include "app/packet.h"
      9 
     10 #include <string.h>
     11 
     12 #define DBGMCU_APB1_FZ MMIO32(DBGMCU_BASE + 0x08)
     13 #define DBGMCU_APB2_FZ MMIO32(DBGMCU_BASE + 0x0C)
     14 
     15 // symbols related to ccm memory area in linker script
     16 extern unsigned _ccm_loadaddr, _sccmram, _eccmram;
     17 
     18 // Copy data from rom/ram to ccm
     19 static void initialize_ccm(void) {
     20 	volatile unsigned *src, *dest;
     21 	for (src = &_ccm_loadaddr, dest = &_sccmram; dest < &_eccmram; src++, dest++) {
     22 		*dest = *src;
     23 	}
     24 }
     25 
     26 static void vector_table_setup(void) { SCB_VTOR = MEM_BL_SIZE + MEM_PARAMS_SIZE; }
     27 
     28 int main(void) {
     29     initialize_ccm();
     30     vector_table_setup();
     31     res_rcc_setup();
     32     res_gpio_setup();
     33     res_usart_init();
     34     res_usart_dma_gsm_setup();
     35     res_usart_dma_dbg_setup();
     36     packet_init();
     37 
     38     os_init_rtos();
     39 
     40     DBGMCU_APB1_FZ |= 0x0002; // stop TIM3 on debug breaks
     41     DBGMCU_APB2_FZ |= 0x0001; // stop TIM1 on debug breaks
     42 
     43     vTaskStartScheduler();
     44     while (1) {
     45     }
     46 
     47     return 0;
     48 }
     49 
     50 // Dummy implementation for syscalls to avoid nosys warnings
     51 void _close(void);
     52 void _fstat(void);
     53 void _getpid(void);
     54 void _isatty(void);
     55 void _kill(void);
     56 void _lseek(void);
     57 void _read(void);
     58 void _write(void);
     59 
     60 void _close(void) {}
     61 void _fstat(void) {}
     62 void _getpid(void) {}
     63 void _isatty(void) {}
     64 void _kill(void) {}
     65 void _lseek(void) {}
     66 void _read(void) {}
     67 void _write(void) {}