int main(void) { leds.initHW(); NVIC_SetPriorityGrouping( NVIC_PriorityGroup_4 ); leds.write( 0x0F ); delay_bad_ms( 200 ); leds.write( 0x0A ); delay_bad_ms( 200 ); leds.reset( 0x0F ); delay_bad_ms( 200 ); xTaskCreate( task_leds, "leds", 2*def_stksz, 0, 1, 0 ); xTaskCreate( task_usart2_send, "send", 2*def_stksz, 0, 1, 0 ); xTaskCreate( task_usart2_recv, "recv", 2*def_stksz, 0, 1, 0 ); xTaskCreate( task_string_send, "ss", def_stksz, 0, 1, 0 ); us2.initIRQ( configKERNEL_INTERRUPT_PRIORITY, 0 ); us2.initHW(); us2.init(); us2.itConfig( USART_IT_RXNE, ENABLE ); us2.setOnRecv( on_received_char ); us2.enable(); vTaskStartScheduler(); die4led( 0xFF ); return 0; }
int main(void) { NVIC_SetPriorityGrouping(3); // enable all GPIO clocks RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN; top_r_led::mode(GPIO_OUTPUT); top_g_led::mode(GPIO_OUTPUT); top_b_led::mode(GPIO_OUTPUT); bot_r_led::mode(GPIO_OUTPUT); bot_g_led::mode(GPIO_OUTPUT); bot_b_led::mode(GPIO_OUTPUT); top_r_led::high(); top_g_led::high(); top_b_led::low(); bot_r_led::low(); bot_g_led::high(); bot_b_led::high(); // setup encoders RCC->APB1ENR |= RCC_APB1ENR_TIM3EN | RCC_APB1ENR_TIM5EN; left_enc_a::mode(GPIO_ALTERNATE | GPIO_AF_TIM5); left_enc_b::mode(GPIO_ALTERNATE | GPIO_AF_TIM5); right_enc_a::mode(GPIO_ALTERNATE | GPIO_AF_TIM3); right_enc_b::mode(GPIO_ALTERNATE | GPIO_AF_TIM3); left_enc.init(); right_enc.init(); // setup motors RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; tim1_ch1::mode(GPIO_ALTERNATE | GPIO_AF_TIM1); tim1_ch1n::mode(GPIO_ALTERNATE | GPIO_AF_TIM1); tim1_ch2::mode(GPIO_ALTERNATE | GPIO_AF_TIM1); tim1_ch2n::mode(GPIO_ALTERNATE | GPIO_AF_TIM1); sck::mode(GPIO_ALTERNATE | GPIO_AF_SPI2); miso::mode(GPIO_ALTERNATE | GPIO_AF_SPI2); mosi::mode(GPIO_ALTERNATE | GPIO_AF_SPI2); left_motor.init(); right_motor.init(); // setup usart RCC->APB2ENR |= RCC_APB2ENR_USART1EN; usart1.init(115200); NVIC_SetPriority(USART1_IRQn, 1); NVIC_EnableIRQ(USART1_IRQn); // setup imu imu.init(100000); // setup systick SysTick_Config(SystemCoreClock/1000); system_clock = 0; __enable_irq(); while(1) { imu.update(system_clock); } }