26 #define LENGTH(x) (sizeof(x) / sizeof((x)[0])) 28 #define CAT2(x,y) x##y 30 #define CAT3(x,y,z) x##y##z 32 #define CAT4(w,x,y,z) w##x##y##z 35 #define COMPUTE_BUILD_YEAR \ 37 (__DATE__[ 7] - '0') * 1000 + \ 38 (__DATE__[ 8] - '0') * 100 + \ 39 (__DATE__[ 9] - '0') * 10 + \ 40 (__DATE__[10] - '0') \ 43 #define COMPUTE_BUILD_DAY \ 45 ((__DATE__[4] >= '0') ? (__DATE__[4] - '0') * 10 : 0) + \ 49 #define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n') 51 #define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F') 53 #define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r') 55 #define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p') 57 #define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y') 59 #define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n') 61 #define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l') 63 #define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u') 65 #define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S') 67 #define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O') 69 #define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N') 71 #define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D') 73 #define COMPUTE_BUILD_MONTH \ 75 (BUILD_MONTH_IS_JAN) ? 1 : \ 76 (BUILD_MONTH_IS_FEB) ? 2 : \ 77 (BUILD_MONTH_IS_MAR) ? 3 : \ 78 (BUILD_MONTH_IS_APR) ? 4 : \ 79 (BUILD_MONTH_IS_MAY) ? 5 : \ 80 (BUILD_MONTH_IS_JUN) ? 6 : \ 81 (BUILD_MONTH_IS_JUL) ? 7 : \ 82 (BUILD_MONTH_IS_AUG) ? 8 : \ 83 (BUILD_MONTH_IS_SEP) ? 9 : \ 84 (BUILD_MONTH_IS_OCT) ? 10 : \ 85 (BUILD_MONTH_IS_NOV) ? 11 : \ 86 (BUILD_MONTH_IS_DEC) ? 12 : \ 90 #define BUILD_DATE_IS_BAD (__DATE__[0] == '?') 92 #define BUILD_YEAR ((BUILD_DATE_IS_BAD) ? 0 : COMPUTE_BUILD_YEAR) 94 #define BUILD_MONTH ((BUILD_DATE_IS_BAD) ? 99 : COMPUTE_BUILD_MONTH) 96 #define BUILD_DAY ((BUILD_DATE_IS_BAD) ? 99 : COMPUTE_BUILD_DAY) 103 #define GPIO(x) CAT2(GPIO,x) 105 #define RCC_GPIO(x) CAT2(RCC_GPIO,x) 107 #define TIM(x) CAT2(TIM,x) 109 #define RCC_TIM(x) CAT2(RCC_TIM,x) 111 #define NVIC_TIM_IRQ(x) CAT3(NVIC_TIM,x,_IRQ) 113 #define TIM_ISR(x) CAT3(tim,x,_isr) 115 #define TIM_CH_PORT(x,y) CAT4(GPIO_BANK_TIM,x,_CH,y) 117 #define TIM_CH_PIN(x,y) CAT4(GPIO_TIM,x,_CH,y) 119 #define RCC_TIM_CH(x,y) CAT4(RCC_TIM,x,_CH,y) 120 #define RCC_TIM1_CH1 RCC_GPIOA 121 #define RCC_TIM1_CH2 RCC_GPIOA 122 #define RCC_TIM1_CH3 RCC_GPIOA 123 #define RCC_TIM1_CH4 RCC_GPIOA 124 #define RCC_TIM1_CH1N RCC_GPIOB 125 #define RCC_TIM1_CH2N RCC_GPIOB 126 #define RCC_TIM1_CH3N RCC_GPIOB 127 #define RCC_TIM2_CH1_ETR RCC_GPIOA 128 #define RCC_TIM2_CH2 RCC_GPIOA 129 #define RCC_TIM2_CH3 RCC_GPIOA 130 #define RCC_TIM2_CH4 RCC_GPIOA 131 #define RCC_TIM3_CH1 RCC_GPIOA 132 #define RCC_TIM3_CH2 RCC_GPIOA 133 #define RCC_TIM3_CH3 RCC_GPIOB 134 #define RCC_TIM3_CH4 RCC_GPIOB 135 #define RCC_TIM4_CH1 RCC_GPIOB 136 #define RCC_TIM4_CH2 RCC_GPIOB 137 #define RCC_TIM4_CH3 RCC_GPIOB 138 #define RCC_TIM4_CH4 RCC_GPIOB 139 #define RCC_TIM5_CH1 RCC_GPIOA 140 #define RCC_TIM5_CH2 RCC_GPIOA 141 #define RCC_TIM5_CH3 RCC_GPIOA 142 #define RCC_TIM5_CH4 RCC_GPIOA 144 #define TIM_IC(x) CAT2(TIM_IC,x) 146 #define TIM_IC_IN_TI(x) CAT2(TIM_IC_IN_TI,x) 148 #define TIM_SR_CCIF(x) CAT3(TIM_SR_CC,x,IF) 150 #define TIM_SR_CCOF(x) CAT3(TIM_SR_CC,x,OF) 152 #define TIM_DIER_CCIE(x) CAT3(TIM_DIER_CC,x,IE) 154 #define TIM_CCR(x,y) CAT2(TIM_CCR,y)(TIM(x)) 156 #define EXTI(x) CAT2(EXTI,x) 158 #define NVIC_EXTI_IRQ(x) CAT3(NVIC_EXTI,x,_IRQ) 159 #define NVIC_EXTI5_IRQ NVIC_EXTI9_5_IRQ 160 #define NVIC_EXTI6_IRQ NVIC_EXTI9_5_IRQ 161 #define NVIC_EXTI7_IRQ NVIC_EXTI9_5_IRQ 162 #define NVIC_EXTI8_IRQ NVIC_EXTI9_5_IRQ 163 #define NVIC_EXTI9_IRQ NVIC_EXTI9_5_IRQ 164 #define NVIC_EXTI10_IRQ NVIC_EXTI15_10_IRQ 165 #define NVIC_EXTI11_IRQ NVIC_EXTI15_10_IRQ 166 #define NVIC_EXTI12_IRQ NVIC_EXTI15_10_IRQ 167 #define NVIC_EXTI13_IRQ NVIC_EXTI15_10_IRQ 168 #define NVIC_EXTI14_IRQ NVIC_EXTI15_10_IRQ 169 #define NVIC_EXTI15_IRQ NVIC_EXTI15_10_IRQ 171 #define EXTI_ISR(x) CAT3(exti,x,_isr) 172 #define exti5_isr exti9_5_isr 173 #define exti6_isr exti9_5_isr 174 #define exti7_isr exti9_5_isr 175 #define exti8_isr exti9_5_isr 176 #define exti9_isr exti9_5_isr 177 #define exti10_isr exti15_10_isr 178 #define exti11_isr exti15_10_isr 179 #define exti12_isr exti15_10_isr 180 #define exti13_isr exti15_10_isr 181 #define exti14_isr exti15_10_isr 182 #define exti15_isr exti15_10_isr 184 #define USART(x) CAT2(USART,x) 186 #define RCC_USART(x) CAT2(RCC_USART,x) 188 #define RST_USART(x) CAT2(RST_USART,x) 190 #define USART_IRQ(x) CAT3(NVIC_USART,x,_IRQ) 192 #define USART_ISR(x) CAT3(usart,x,_isr) 194 #define USART_TX_PORT(x) CAT3(GPIO_BANK_USART,x,_TX) 196 #define USART_RX_PORT(x) CAT3(GPIO_BANK_USART,x,_RX) 198 #define USART_RTS_PORT(x) CAT3(GPIO_BANK_USART,x,_RTS) 200 #define USART_CTS_PORT(x) CAT3(GPIO_BANK_USART,x,_CTS) 202 #define USART_TX_PIN(x) CAT3(GPIO_USART,x,_TX) 204 #define USART_RX_PIN(x) CAT3(GPIO_USART,x,_RX) 206 #define USART_RTS_PIN(x) CAT3(GPIO_USART,x,_RTS) 208 #define USART_CTS_PIN(x) CAT3(GPIO_USART,x,_CTS) 210 #define RCC_USART_PORT(x) CAT2(RCC_USART_PORT,x) 211 #define RCC_USART_PORT1 RCC_GPIOA 212 #define RCC_USART_PORT2 RCC_GPIOA 213 #define RCC_USART_PORT3 RCC_GPIOB 215 #define ADC12_IN_PORT(x) CAT3(ADC12_IN,x,_PORT) 216 #define ADC12_IN0_PORT GPIOA 217 #define ADC12_IN1_PORT GPIOA 218 #define ADC12_IN2_PORT GPIOA 219 #define ADC12_IN3_PORT GPIOA 220 #define ADC12_IN4_PORT GPIOA 221 #define ADC12_IN5_PORT GPIOA 222 #define ADC12_IN6_PORT GPIOA 223 #define ADC12_IN7_PORT GPIOA 224 #define ADC12_IN8_PORT GPIOB 225 #define ADC12_IN9_PORT GPIOB 226 #define ADC12_IN10_PORT GPIOC 227 #define ADC12_IN11_PORT GPIOC 228 #define ADC12_IN12_PORT GPIOC 229 #define ADC12_IN13_PORT GPIOC 230 #define ADC12_IN14_PORT GPIOC 231 #define ADC12_IN15_PORT GPIOC 233 #define ADC12_IN_PIN(x) CAT3(ADC12_IN,x,_PIN) 234 #define ADC12_IN0_PIN GPIO0 235 #define ADC12_IN1_PIN GPIO1 236 #define ADC12_IN2_PIN GPIO2 237 #define ADC12_IN3_PIN GPIO3 238 #define ADC12_IN4_PIN GPIO4 239 #define ADC12_IN5_PIN GPIO5 240 #define ADC12_IN6_PIN GPIO6 241 #define ADC12_IN7_PIN GPIO7 242 #define ADC12_IN8_PIN GPIO0 243 #define ADC12_IN9_PIN GPIO1 244 #define ADC12_IN10_PIN GPIO0 245 #define ADC12_IN11_PIN GPIO1 246 #define ADC12_IN12_PIN GPIO2 247 #define ADC12_IN13_PIN GPIO3 248 #define ADC12_IN14_PIN GPIO4 249 #define ADC12_IN15_PIN GPIO5 251 #define RCC_ADC12_IN(x) CAT2(RCC_ADC12_IN,x) 252 #define RCC_ADC12_IN0 RCC_GPIOA 253 #define RCC_ADC12_IN1 RCC_GPIOA 254 #define RCC_ADC12_IN2 RCC_GPIOA 255 #define RCC_ADC12_IN3 RCC_GPIOA 256 #define RCC_ADC12_IN4 RCC_GPIOA 257 #define RCC_ADC12_IN5 RCC_GPIOA 258 #define RCC_ADC12_IN6 RCC_GPIOA 259 #define RCC_ADC12_IN7 RCC_GPIOA 260 #define RCC_ADC12_IN8 RCC_GPIOB 261 #define RCC_ADC12_IN9 RCC_GPIOB 262 #define RCC_ADC12_IN10 RCC_GPIOC 263 #define RCC_ADC12_IN11 RCC_GPIOC 264 #define RCC_ADC12_IN12 RCC_GPIOC 265 #define RCC_ADC12_IN13 RCC_GPIOC 266 #define RCC_ADC12_IN14 RCC_GPIOC 267 #define RCC_ADC12_IN15 RCC_GPIOC 269 #define ADC_CHANNEL(x) CAT2(ADC_CHANNEL,x) 271 #define SPI(x) CAT2(SPI,x) 273 #define RCC_SPI(x) CAT2(RCC_SPI,x) 275 #define RCC_SPI_NSS_PORT(x) CAT3(RCC_SPI,x,_NSS_PORT) 276 #define RCC_SPI1_NSS_PORT RCC_GPIOA 277 #define RCC_SPI1_RE_NSS_PORT RCC_GPIOA 278 #define RCC_SPI2_NSS_PORT RCC_GPIOB 280 #define RCC_SPI_SCK_PORT(x) CAT3(RCC_SPI,x,_SCK_PORT) 281 #define RCC_SPI1_SCK_PORT RCC_GPIOA 282 #define RCC_SPI1_RE_SCK_PORT RCC_GPIOB 283 #define RCC_SPI2_SCK_PORT RCC_GPIOB 285 #define RCC_SPI_MISO_PORT(x) CAT3(RCC_SPI,x,_MISO_PORT) 286 #define RCC_SPI1_MISO_PORT RCC_GPIOA 287 #define RCC_SPI1_RE_MISO_PORT RCC_GPIOB 288 #define RCC_SPI2_MISO_PORT RCC_GPIOB 290 #define RCC_SPI_MOSI_PORT(x) CAT3(RCC_SPI,x,_MOSI_PORT) 291 #define RCC_SPI1_MOSI_PORT RCC_GPIOA 292 #define RCC_SPI1_RE_MOSI_PORT RCC_GPIOB 293 #define RCC_SPI2_MOSI_PORT RCC_GPIOB 295 #define SPI_NSS_PORT(x) CAT3(GPIO_BANK_SPI,x,_NSS) 297 #define SPI_SCK_PORT(x) CAT3(GPIO_BANK_SPI,x,_SCK) 299 #define SPI_MISO_PORT(x) CAT3(GPIO_BANK_SPI,x,_MISO) 301 #define SPI_MOSI_PORT(x) CAT3(GPIO_BANK_SPI,x,_MOSI) 303 #define SPI_NSS_PIN(x) CAT3(GPIO_SPI,x,_NSS) 305 #define SPI_SCK_PIN(x) CAT3(GPIO_SPI,x,_SCK) 307 #define SPI_MISO_PIN(x) CAT3(GPIO_SPI,x,_MISO) 309 #define SPI_MOSI_PIN(x) CAT3(GPIO_SPI,x,_MOSI) 311 #define SPI_CRC_PR(x) CAT3(SPI,x,_CRCPR) 313 #define SPI_CRC_TXR(x) CAT3(SPI,x,_TXCRCR) 315 #define SPI_CRC_RXR(x) CAT3(SPI,x,_RXCRCR) 317 #define DMA_SPI(x) CAT2(DMA_SPI,x) 318 #define DMA_SPI1 DMA1 319 #define DMA_SPI2 DMA1 320 #define DMA_SPI3 DMA2 322 #define RCC_DMA_SPI(x) CAT2(RCC_DMA_SPI,x) 323 #define RCC_DMA_SPI1 RCC_DMA1 324 #define RCC_DMA_SPI2 RCC_DMA1 325 #define RCC_DMA_SPI3 RCC_DMA2 327 #define DMA_CHANNEL_SPI_TX(x) CAT3(DMA_CHANNEL_SPI,x,_TX) 328 #define DMA_CHANNEL_SPI1_TX DMA_CHANNEL3 329 #define DMA_CHANNEL_SPI2_TX DMA_CHANNEL5 330 #define DMA_CHANNEL_SPI3_TX DMA_CHANNEL2 332 #define DMA_CHANNEL_SPI_RX(x) CAT3(DMA_CHANNEL_SPI,x,_RX) 333 #define DMA_CHANNEL_SPI1_RX DMA_CHANNEL4 334 #define DMA_CHANNEL_SPI2_RX DMA_CHANNEL2 335 #define DMA_CHANNEL_SPI3_RX DMA_CHANNEL1 337 #define DMA_IRQ_SPI_TX(x) CAT3(NVIC_DMA_CHANNEL_IRQ_SPI,x,_TX) 338 #define NVIC_DMA_CHANNEL_IRQ_SPI1_TX NVIC_DMA1_CHANNEL3_IRQ 339 #define NVIC_DMA_CHANNEL_IRQ_SPI2_TX NVIC_DMA1_CHANNEL5_IRQ 340 #define NVIC_DMA_CHANNEL_IRQ_SPI3_TX NVIC_DMA2_CHANNEL2_IRQ 342 #define DMA_IRQ_SPI_RX(x) CAT3(NVIC_DMA_CHANNEL_IRQ_SPI,x,_RX) 343 #define NVIC_DMA_CHANNEL_IRQ_SPI1_RX NVIC_DMA1_CHANNEL4_IRQ 344 #define NVIC_DMA_CHANNEL_IRQ_SPI2_RX NVIC_DMA1_CHANNEL2_IRQ 345 #define NVIC_DMA_CHANNEL_IRQ_SPI3_RX NVIC_DMA2_CHANNEL1_IRQ 347 #define DMA_ISR_SPI_TX(x) CAT3(DMA_CHANNEL_ISR_SPI,x,_TX) 348 #define DMA_CHANNEL_ISR_SPI1_TX dma1_channel3_isr 349 #define DMA_CHANNEL_ISR_SPI2_TX dma1_channel5_isr 350 #define DMA_CHANNEL_ISR_SPI3_TX dma2_channel2_isr 352 #define DMA_ISR_SPI_RX(x) CAT3(DMA_CHANNEL_ISR_SPI,x,_RX) 353 #define DMA_CHANNEL_ISR_SPI1_RX dma1_channel4_isr 354 #define DMA_CHANNEL_ISR_SPI2_RX dma1_channel2_isr 355 #define DMA_CHANNEL_ISR_SPI3_RX dma2_channel1_isr 361 #if defined(SYSTEM_BOARD) || defined(CORE_BOARD) 366 #elif defined(BLUE_PILL) 371 #elif defined (MAPLE_MINI) 376 #elif defined (BUSVOODOO) 387 #if defined(MAPLE_MINI) 389 #define BUTTON_PORT B 391 #define BUTTON_PRESSED 1 392 #elif defined(CORE_BOARD) 394 #define BUTTON_PORT A 396 #define BUTTON_PRESSED 0 403 #if defined(MAPLE_MINI) 405 #define DFU_FORCE_PORT BUTTON_PORT 406 #define DFU_FORCE_PIN BUTTON_PIN 407 #define DFU_FORCE_VALUE 1 408 #elif defined(CORE_BOARD) 410 #define DFU_FORCE_PORT BUTTON_PORT 411 #define DFU_FORCE_PIN BUTTON_PIN 412 #define DFU_FORCE_VALUE 0 413 #elif defined(BUSVOODOO) 414 #if BUSVOODOO_HARDWARE_VERSION==0 416 #define DFU_FORCE_PORT C 417 #define DFU_FORCE_PIN 7 418 #define DFU_FORCE_VALUE 1 421 #define DFU_FORCE_PORT C 422 #define DFU_FORCE_PIN 4 423 #define DFU_FORCE_VALUE 1 427 #define DFU_FORCE_PORT B 428 #define DFU_FORCE_PIN 4 429 #define DFU_FORCE_VALUE 0 455 char*
b2s(uint64_t binary, uint8_t rjust);
void led_off(void)
switch off board LED
char __application_beginning
symbol for beginning of the application
void led_on(void)
switch on board LED
char __flash_end
symbol for end of flash
void led_toggle(void)
toggle board LED
void sleep_us(uint32_t duration)
go to sleep for some microseconds
void sleep_ms(uint32_t duration)
go to sleep for some milliseconds
char * b2s(uint64_t binary, uint8_t rjust)
get binary representation of a number
char user_input_get(void)
get user input
char __application_end
symbol for end of the application
volatile bool user_input_available
flag set when user input is available
volatile bool button_flag
flag set when board user button has been pressed/released
void board_setup(void)
setup board peripherals
void user_input_store(char c)
store user input