void uart1_init(void) { uart_periph_init(&uart1); uart1.reg_addr = (void *)USART1; /* init RCC and GPIOs */ rcc_periph_clock_enable(RCC_USART1); #if USE_UART1_TX gpio_setup_pin_af(UART1_GPIO_PORT_TX, UART1_GPIO_TX, UART1_GPIO_AF, TRUE); #endif #if USE_UART1_RX gpio_setup_pin_af(UART1_GPIO_PORT_RX, UART1_GPIO_RX, UART1_GPIO_AF, FALSE); #endif /* Enable USART interrupts in the interrupt controller */ usart_enable_irq(NVIC_USART1_IRQ); #if UART1_HW_FLOW_CONTROL #warning "USING UART1 FLOW CONTROL. Make sure to pull down CTS if you are not connecting any flow-control-capable hardware." /* setup CTS and RTS gpios */ gpio_setup_pin_af(UART1_GPIO_PORT_CTS, UART1_GPIO_CTS, UART1_GPIO_AF, FALSE); gpio_setup_pin_af(UART1_GPIO_PORT_RTS, UART1_GPIO_RTS, UART1_GPIO_AF, TRUE); #endif /* Configure USART1, enable hardware flow control*/ uart_periph_set_mode(&uart1, USE_UART1_TX, USE_UART1_RX, UART1_HW_FLOW_CONTROL); /* Set USART1 parameters and enable interrupt */ uart_periph_set_bits_stop_parity(&uart1, UART1_BITS, UART1_STOP, UART1_PARITY); uart_periph_set_baudrate(&uart1, UART1_BAUD); }
void uart6_init( void ) { uart_periph_init(&uart6); uart6.reg_addr = (void *)USART6; /* enable uart clock */ rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_USART6EN); /* init RCC and GPIOs */ #if USE_UART6_TX gpio_setup_pin_af(UART6_GPIO_PORT_TX, UART6_GPIO_TX, UART6_GPIO_AF, TRUE); #endif #if USE_UART6_RX gpio_setup_pin_af(UART6_GPIO_PORT_RX, UART6_GPIO_RX, UART6_GPIO_AF, FALSE); #endif /* Enable USART interrupts in the interrupt controller */ usart_enable_irq(NVIC_USART6_IRQ); #if UART6_HW_FLOW_CONTROL #warning "USING UART6 FLOW CONTROL. Make sure to pull down CTS if you are not connecting any flow-control-capable hardware." /* setup CTS and RTS pins */ gpio_setup_pin_af(UART6_GPIO_PORT_CTS, UART6_GPIO_CTS, UART6_GPIO_AF, FALSE); gpio_setup_pin_af(UART6_GPIO_PORT_RTS, UART6_GPIO_RTS, UART6_GPIO_AF, TRUE); #endif /* Configure USART Tx,Rx and hardware flow control*/ uart_periph_set_mode(&uart6, USE_UART6_TX, USE_UART6_RX, UART6_HW_FLOW_CONTROL); uart_periph_set_baudrate(&uart6, UART6_BAUD); }
void uart3_init( void ) { uart_periph_init(&uart3); uart3.reg_addr = (void *)USART3; /* init RCC */ rcc_peripheral_enable_clock(&RCC_APB1ENR, RCC_APB1ENR_USART3EN); #if USE_UART3_TX gpio_setup_pin_af(UART3_GPIO_PORT_TX, UART3_GPIO_TX, UART3_GPIO_AF, TRUE); #endif #if USE_UART3_RX gpio_setup_pin_af(UART3_GPIO_PORT_RX, UART3_GPIO_RX, UART3_GPIO_AF, FALSE); #endif /* Enable USART interrupts in the interrupt controller */ usart_enable_irq(NVIC_USART3_IRQ); #if UART3_HW_FLOW_CONTROL && defined(STM32F4) #warning "USING UART3 FLOW CONTROL. Make sure to pull down CTS if you are not connecting any flow-control-capable hardware." /* setup CTS and RTS pins */ gpio_setup_pin_af(UART3_GPIO_PORT_CTS, UART3_GPIO_CTS, UART3_GPIO_AF, FALSE); gpio_setup_pin_af(UART3_GPIO_PORT_RTS, UART3_GPIO_RTS, UART3_GPIO_AF, TRUE); #endif /* Configure USART Tx,Rx, and hardware flow control*/ uart_periph_set_mode(&uart3, USE_UART3_TX, USE_UART3_RX, UART3_HW_FLOW_CONTROL); /* Configure USART */ uart_periph_set_baudrate(&uart3, UART3_BAUD); }
void uart2_init(void) { uart_periph_init(&uart2); uart2.reg_addr = (void *)USART2; /* init RCC and GPIOs */ rcc_periph_clock_enable(RCC_USART2); #if USE_UART2_TX gpio_setup_pin_af(UART2_GPIO_PORT_TX, UART2_GPIO_TX, UART2_GPIO_AF, TRUE); #endif #if USE_UART2_RX gpio_setup_pin_af(UART2_GPIO_PORT_RX, UART2_GPIO_RX, UART2_GPIO_AF, FALSE); #endif /* Enable USART interrupts in the interrupt controller */ usart_enable_irq(NVIC_USART2_IRQ); #if UART2_HW_FLOW_CONTROL && defined(STM32F4) #warning "USING UART2 FLOW CONTROL. Make sure to pull down CTS if you are not connecting any flow-control-capable hardware." /* setup CTS and RTS pins */ gpio_setup_pin_af(UART2_GPIO_PORT_CTS, UART2_GPIO_CTS, UART2_GPIO_AF, FALSE); gpio_setup_pin_af(UART2_GPIO_PORT_RTS, UART2_GPIO_RTS, UART2_GPIO_AF, TRUE); #endif /* Configure USART Tx,Rx, and hardware flow control*/ uart_periph_set_mode(&uart2, USE_UART2_TX, USE_UART2_RX, UART2_HW_FLOW_CONTROL); /* Configure USART */ uart_periph_set_bits_stop_parity(&uart2, UART2_BITS, UART2_STOP, UART2_PARITY); uart_periph_set_baudrate(&uart2, UART2_BAUD); }
void uart8_init(void) { uart_periph_init(&uart8); // Only set pin if enabled and not statically defined in board file #if USE_UART8_TX && defined UART8_GPIO_PORT_TX gpio_setup_pin_af(UART8_GPIO_PORT_TX, UART8_GPIO_TX, UART8_GPIO_AF, TRUE); #endif #if USE_UART8_RX && defined UART8_GPIO_PORT_RX gpio_setup_pin_af(UART8_GPIO_PORT_RX, UART8_GPIO_RX, UART8_GPIO_AF, FALSE); #endif sdStart(&SD8, &usart8_config); uart8.reg_addr = &SD8; uart8.init_struct = &uart8_init_struct; uart8_init_struct.conf = &usart8_config; // Create threads #if USE_UART8_RX uart8_init_struct.rx_mtx = &uart8_rx_mtx; uart8_init_struct.rx_sem = &uart8_rx_sem; chThdCreateStatic(wa_thd_uart8_rx, sizeof(wa_thd_uart8_rx), NORMALPRIO, thd_uart8_rx, NULL); #endif #if USE_UART8_TX uart8_init_struct.tx_mtx = &uart8_tx_mtx; uart8_init_struct.tx_sem = &uart8_tx_sem; chThdCreateStatic(wa_thd_uart8_tx, sizeof(wa_thd_uart8_tx), NORMALPRIO, thd_uart8_tx, NULL); #endif }
/** PWM arch init called by generic pwm driver */ void actuators_dualpwm_arch_init(void) { /*----------------------------------- * Configure timer peripheral clocks *-----------------------------------*/ #if PWM_USE_TIM1 rcc_periph_clock_enable(RCC_TIM1); #endif #if PWM_USE_TIM2 rcc_periph_clock_enable(RCC_TIM2); #endif #if PWM_USE_TIM3 rcc_periph_clock_enable(RCC_TIM3); #endif #if PWM_USE_TIM4 rcc_periph_clock_enable(RCC_TIM4); #endif #if PWM_USE_TIM5 rcc_periph_clock_enable(RCC_TIM5); #endif #if PWM_USE_TIM8 rcc_periph_clock_enable(RCC_TIM8); #endif #if PWM_USE_TIM9 rcc_periph_clock_enable(RCC_TIM9); #endif #if PWM_USE_TIM12 rcc_periph_clock_enable(RCC_TIM12); #endif /*---------------- * Configure GPIO *----------------*/ #ifdef DUAL_PWM_SERVO_5 gpio_setup_pin_af(DUAL_PWM_SERVO_5_GPIO, DUAL_PWM_SERVO_5_PIN, DUAL_PWM_SERVO_5_AF, TRUE); #endif #ifdef DUAL_PWM_SERVO_6 gpio_setup_pin_af(DUAL_PWM_SERVO_6_GPIO, DUAL_PWM_SERVO_6_PIN, DUAL_PWM_SERVO_6_AF, TRUE); #endif #if DUAL_PWM_USE_TIM5 set_servo_timer(TIM5, TIM5_SERVO_HZ, PWM_TIM5_CHAN_MASK); nvic_set_priority(NVIC_TIM5_IRQ, 2); nvic_enable_irq(NVIC_TIM5_IRQ); timer_enable_irq(TIM5, TIM_DIER_CC1IE); #endif //calculation the values to put into the timer registers to generate pulses every 4ms and 16ms. ratio_4ms = (ONE_MHZ_CLK / 250) - 1; ratio_16ms = (ONE_MHZ_CLK / 62.5) - 1; }
void ppm_arch_init ( void ) { /* timer clock enable */ rcc_peripheral_enable_clock(PPM_RCC, PPM_PERIPHERAL); /* GPIO clock enable */ gpio_enable_clock(PPM_GPIO_PORT); /* timer gpio configuration */ gpio_setup_pin_af(PPM_GPIO_PORT, PPM_GPIO_PIN, PPM_GPIO_AF, FALSE); /* Time Base configuration */ timer_reset(PPM_TIMER); timer_set_mode(PPM_TIMER, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); timer_set_period(PPM_TIMER, 0xFFFF); timer_set_prescaler(PPM_TIMER, (PPM_TIMER_CLK / (RC_PPM_TICKS_PER_USEC*ONE_MHZ_CLK)) - 1); /* TIM configuration: Input Capture mode --------------------- The Rising edge is used as active edge ------------------------------------------------------------ */ #if defined PPM_PULSE_TYPE && PPM_PULSE_TYPE == PPM_PULSE_TYPE_POSITIVE timer_ic_set_polarity(PPM_TIMER, PPM_CHANNEL, TIM_IC_RISING); #elif defined PPM_PULSE_TYPE && PPM_PULSE_TYPE == PPM_PULSE_TYPE_NEGATIVE timer_ic_set_polarity(PPM_TIMER, PPM_CHANNEL, TIM_IC_FALLING); #else #error "Unknown PPM_PULSE_TYPE" #endif timer_ic_set_input(PPM_TIMER, PPM_CHANNEL, PPM_TIMER_INPUT); timer_ic_set_prescaler(PPM_TIMER, PPM_CHANNEL, TIM_IC_PSC_OFF); timer_ic_set_filter(PPM_TIMER, PPM_CHANNEL, TIM_IC_OFF); /* Enable timer Interrupt(s). */ nvic_set_priority(PPM_IRQ, 2); nvic_enable_irq(PPM_IRQ); #ifdef PPM_IRQ2 nvic_set_priority(PPM_IRQ2, 2); nvic_enable_irq(PPM_IRQ2); #endif /* Enable the Capture/Compare and Update interrupt requests. */ timer_enable_irq(PPM_TIMER, (PPM_CC_IE | TIM_DIER_UIE)); /* Enable capture channel. */ timer_ic_enable(PPM_TIMER, PPM_CHANNEL); /* TIM enable counter */ timer_enable_counter(PPM_TIMER); ppm_last_pulse_time = 0; ppm_cur_pulse = RADIO_CONTROL_NB_CHANNEL; timer_rollover_cnt = 0; }
void uart5_init( void ) { uart_periph_init(&uart5); uart5.reg_addr = (void *)UART5; /* init RCC and GPIOs */ rcc_peripheral_enable_clock(&RCC_APB1ENR, RCC_APB1ENR_UART5EN); #if USE_UART5_TX gpio_setup_pin_af(UART5_GPIO_PORT_TX, UART5_GPIO_TX, UART5_GPIO_AF, TRUE); #endif #if USE_UART5_RX gpio_setup_pin_af(UART5_GPIO_PORT_RX, UART5_GPIO_RX, UART5_GPIO_AF, FALSE); #endif /* Enable USART interrupts in the interrupt controller */ usart_enable_irq(NVIC_UART5_IRQ); /* Configure USART */ uart_periph_set_mode(&uart5, USE_UART5_TX, USE_UART5_RX, FALSE); uart_periph_set_baudrate(&uart5, UART5_BAUD); }
void uart5_init( void ) { uart_periph_init(&uart5); uart5.reg_addr = (void *)UART5; /* init RCC and GPIOs */ rcc_periph_clock_enable(RCC_UART5); #if USE_UART5_TX gpio_setup_pin_af(UART5_GPIO_PORT_TX, UART5_GPIO_TX, UART5_GPIO_AF, TRUE); #endif #if USE_UART5_RX gpio_setup_pin_af(UART5_GPIO_PORT_RX, UART5_GPIO_RX, UART5_GPIO_AF, FALSE); #endif /* Enable USART interrupts in the interrupt controller */ usart_enable_irq(NVIC_UART5_IRQ); /* Configure USART */ uart_periph_set_mode(&uart5, USE_UART5_TX, USE_UART5_RX, FALSE); uart_periph_set_bits_stop_parity(&uart5, UART5_BITS, UART5_STOP, UART5_PARITY); uart_periph_set_baudrate(&uart5, UART5_BAUD); }
void pwm_input_init(void) { int i; // initialize the arrays to 0 for (i = 0; i < PWM_INPUT_NB; i++) { pwm_input_duty_tics[i] = 0; pwm_input_duty_valid[i] = 0; pwm_input_period_tics[i] = 0; pwm_input_period_valid[i] = 0; } /** Configure timers * - timer clock enable * - base configuration * - enable counter */ #if USE_PWM_INPUT_TIM1 rcc_periph_clock_enable(RCC_TIM1); pwm_input_set_timer(TIM1, PWM_INPUT_TIM1_TICKS_PER_USEC); #endif #if USE_PWM_INPUT_TIM2 rcc_periph_clock_enable(RCC_TIM2); pwm_input_set_timer(TIM2, PWM_INPUT_TIM2_TICKS_PER_USEC); #endif #if USE_PWM_INPUT_TIM3 rcc_periph_clock_enable(RCC_TIM3); pwm_input_set_timer(TIM3, PWM_INPUT_TIM3_TICKS_PER_USEC); #endif #if USE_PWM_INPUT_TIM5 rcc_periph_clock_enable(RCC_TIM5); pwm_input_set_timer(TIM5, PWM_INPUT_TIM5_TICKS_PER_USEC); #endif #if USE_PWM_INPUT_TIM8 rcc_periph_clock_enable(RCC_TIM8); pwm_input_set_timer(TIM8, PWM_INPUT_TIM8_TICKS_PER_USEC); #endif #if USE_PWM_INPUT_TIM9 rcc_periph_clock_enable(RCC_TIM9); pwm_input_set_timer(TIM9, PWM_INPUT_TIM9_TICKS_PER_USEC); #endif #ifdef USE_PWM_INPUT1 /* GPIO configuration as input capture for timer */ gpio_setup_pin_af(PWM_INPUT1_GPIO_PORT, PWM_INPUT1_GPIO_PIN, PWM_INPUT1_GPIO_AF, FALSE); /** TIM configuration: Input Capture mode * Two IC signals are mapped to the same TI input */ timer_ic_set_input(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_PERIOD, PWM_INPUT1_TIMER_INPUT); timer_ic_set_input(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_DUTY, PWM_INPUT1_TIMER_INPUT); #if USE_PWM_INPUT1 == PWM_PULSE_TYPE_ACTIVE_LOW timer_ic_set_polarity(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_PERIOD, TIM_IC_RISING); timer_ic_set_polarity(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_DUTY, TIM_IC_FALLING); #elif USE_PWM_INPUT1 == PWM_PULSE_TYPE_ACTIVE_HIGH timer_ic_set_polarity(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_PERIOD, TIM_IC_FALLING); timer_ic_set_polarity(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_DUTY, TIM_IC_RISING); #endif /* Select the valid trigger input */ timer_slave_set_trigger(PWM_INPUT1_TIMER, PWM_INPUT1_SLAVE_TRIG); /* Configure the slave mode controller in reset mode */ timer_slave_set_mode(PWM_INPUT1_TIMER, TIM_SMCR_SMS_RM); /* Enable timer Interrupt(s). */ nvic_set_priority(PWM_INPUT1_IRQ, PWM_INPUT_IRQ_PRIO); nvic_enable_irq(PWM_INPUT1_IRQ); #ifdef PWM_INPUT1_IRQ2 nvic_set_priority(PWM_INPUT1_IRQ2, PWM_INPUT_IRQ_PRIO); nvic_enable_irq(PWM_INPUT1_IRQ2); #endif /* Enable the Capture/Compare and Update interrupt requests. */ timer_enable_irq(PWM_INPUT1_TIMER, (PWM_INPUT1_CC_IE | TIM_DIER_UIE)); /* Enable capture channel. */ timer_ic_enable(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_PERIOD); timer_ic_enable(PWM_INPUT1_TIMER, PWM_INPUT1_CHANNEL_DUTY); #endif #ifdef USE_PWM_INPUT2 /* GPIO configuration as input capture for timer */ gpio_setup_pin_af(PWM_INPUT2_GPIO_PORT, PWM_INPUT2_GPIO_PIN, PWM_INPUT2_GPIO_AF, FALSE); /** TIM configuration: Input Capture mode * Two IC signals are mapped to the same TI input */ timer_ic_set_input(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_PERIOD, PWM_INPUT2_TIMER_INPUT); timer_ic_set_input(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_DUTY, PWM_INPUT2_TIMER_INPUT); #if USE_PWM_INPUT2 == PWM_PULSE_TYPE_ACTIVE_LOW timer_ic_set_polarity(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_PERIOD, TIM_IC_RISING); timer_ic_set_polarity(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_DUTY, TIM_IC_FALLING); #elif USE_PWM_INPUT2 == PWM_PULSE_TYPE_ACTIVE_HIGH timer_ic_set_polarity(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_PERIOD, TIM_IC_FALLING); timer_ic_set_polarity(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_DUTY, TIM_IC_RISING); #endif /* Select the valid trigger input */ timer_slave_set_trigger(PWM_INPUT2_TIMER, PWM_INPUT2_SLAVE_TRIG); /* Configure the slave mode controller in reset mode */ timer_slave_set_mode(PWM_INPUT2_TIMER, TIM_SMCR_SMS_RM); /* Enable timer Interrupt(s). */ nvic_set_priority(PWM_INPUT2_IRQ, PWM_INPUT_IRQ_PRIO); nvic_enable_irq(PWM_INPUT2_IRQ); #ifdef PWM_INPUT2_IRQ2 nvic_set_priority(PWM_INPUT2_IRQ2, PWM_INPUT_IRQ_PRIO); nvic_enable_irq(PWM_INPUT2_IRQ2); #endif /* Enable the Capture/Compare and Update interrupt requests. */ timer_enable_irq(PWM_INPUT2_TIMER, (PWM_INPUT2_CC_IE | TIM_DIER_UIE)); /* Enable capture channel. */ timer_ic_enable(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_PERIOD); timer_ic_enable(PWM_INPUT2_TIMER, PWM_INPUT2_CHANNEL_DUTY); #endif }
void actuators_pwm_arch_init(void) { /*---------------- * Configure GPIO *----------------*/ #ifdef PWM_SERVO_0 gpio_setup_pin_af(PWM_SERVO_0_GPIO, PWM_SERVO_0_PIN, PWM_SERVO_0_AF, true); #endif #ifdef PWM_SERVO_1 gpio_setup_pin_af(PWM_SERVO_1_GPIO, PWM_SERVO_1_PIN, PWM_SERVO_1_AF, true); #endif #ifdef PWM_SERVO_2 gpio_setup_pin_af(PWM_SERVO_2_GPIO, PWM_SERVO_2_PIN, PWM_SERVO_2_AF, true); #endif #ifdef PWM_SERVO_3 gpio_setup_pin_af(PWM_SERVO_3_GPIO, PWM_SERVO_3_PIN, PWM_SERVO_3_AF, true); #endif #ifdef PWM_SERVO_4 gpio_setup_pin_af(PWM_SERVO_4_GPIO, PWM_SERVO_4_PIN, PWM_SERVO_4_AF, true); #endif #ifdef PWM_SERVO_5 gpio_setup_pin_af(PWM_SERVO_5_GPIO, PWM_SERVO_5_PIN, PWM_SERVO_5_AF, true); #endif #ifdef PWM_SERVO_6 gpio_setup_pin_af(PWM_SERVO_6_GPIO, PWM_SERVO_6_PIN, PWM_SERVO_6_AF, true); #endif #ifdef PWM_SERVO_7 gpio_setup_pin_af(PWM_SERVO_7_GPIO, PWM_SERVO_7_PIN, PWM_SERVO_7_AF, true); #endif #ifdef PWM_SERVO_8 gpio_setup_pin_af(PWM_SERVO_8_GPIO, PWM_SERVO_8_PIN, PWM_SERVO_8_AF, true); #endif #ifdef PWM_SERVO_9 gpio_setup_pin_af(PWM_SERVO_9_GPIO, PWM_SERVO_9_PIN, PWM_SERVO_9_AF, true); #endif #ifdef PWM_SERVO_10 gpio_setup_pin_af(PWM_SERVO_10_GPIO, PWM_SERVO_10_PIN, PWM_SERVO_10_AF, true); #endif #ifdef PWM_SERVO_11 gpio_setup_pin_af(PWM_SERVO_11_GPIO, PWM_SERVO_11_PIN, PWM_SERVO_11_AF, true); #endif /*--------------- * Configure PWM *---------------*/ #if PWM_CONF_TIM1 pwmStart(&PWMD1, &pwmcfg1); #endif #if PWM_CONF_TIM2 pwmStart(&PWMD2, &pwmcfg2); #endif #if PWM_CONF_TIM3 pwmStart(&PWMD3, &pwmcfg3); #endif #if PWM_CONF_TIM4 pwmStart(&PWMD4, &pwmcfg4); #endif #if PWM_CONF_TIM5 pwmStart(&PWMD5, &pwmcfg5); #endif #if PWM_CONF_TIM8 pwmStart(&PWMD8, &pwmcfg8); #endif #if PWM_CONF_TIM9 pwmStart(&PWMD9, &pwmcfg9); #endif }