WoodData 发表于 2023-10-28 11:16

【AT-START-F423测评】+串口测试及nr_micro_shell移植

本次主要测试一下串口。使用中断接收数据。串口初始化:
/**
* @briefinitialize uart
* @parambaudrate: uart baudrate
* @retval none
*/
void uart_print_init(uint32_t baudrate)
{
    gpio_init_type gpio_init_struct;

    /* enable the uart and gpio clock */
    crm_periph_clock_enable(PRINT_UART_CRM_CLK, TRUE);
    crm_periph_clock_enable(PRINT_UART_TX_GPIO_CRM_CLK, TRUE);

    gpio_default_para_init(&gpio_init_struct);

    /* configure the uart tx pin */
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type= GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
    gpio_init_struct.gpio_pins = PRINT_UART_TX_PIN | PRINT_UART_RX_PIN;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init(PRINT_UART_TX_GPIO, &gpio_init_struct);
    gpio_pin_mux_config(PRINT_UART_TX_GPIO, PRINT_UART_TX_PIN_SOURCE, PRINT_UART_TX_PIN_MUX_NUM);
    gpio_pin_mux_config(PRINT_UART_RX_GPIO, PRINT_UART_RX_PIN_SOURCE, PRINT_UART_RX_PIN_MUX_NUM);
   
    /* configure uart param */
    usart_init(PRINT_UART, baudrate, USART_DATA_8BITS, USART_STOP_1_BIT);
    usart_transmitter_enable(PRINT_UART, TRUE);
    usart_receiver_enable(PRINT_UART, TRUE);
    /* enable usart RX interrupt */
    usart_interrupt_enable(PRINT_UART, USART_RDBF_INT, TRUE);
    usart_enable(PRINT_UART, TRUE);
   
    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
    nvic_irq_enable(PRINT_UART_IRQn, 0, 0);
}中断接收,通过fifo缓存方式存储接收的数据。
/**
* @briefthis function handles usart1 handler.
* @paramnone
* @retval none
*/
void USART1_IRQHandler(void)
{
    if(usart_flag_get(PRINT_UART, USART_RDBF_FLAG) != RESET)
    {
      gpio_bits_toggle(LED3_GPIO,LED3_PIN);
      fifo_push(&print_uart_rx,usart_data_receive(PRINT_UART));
    }
}
下面实现printf打印。首先在pack内选择如下:


然后添加int stdout_putchar (int ch)函数就可以了int stdout_putchar (int ch)
{
    while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET);
    usart_data_transmit(PRINT_UART, (uint16_t)ch);
    while(usart_flag_get(PRINT_UART, USART_TDC_FLAG) == RESET);
    return ch;
}

main函数测试printf以及串口发送接收数据:
int main(void)
{
    uint8_t ch;
    volatile int32_t i=0;
   
    system_clock_config();
    SysTick_Config(SystemCoreClock/1000);
   
    at32_led_init();
    at32_button_init();
    uart_print_init(115200);
    printf("at32f423 board print test.\r\n");
    while(1)
    {
      gpio_bits_toggle(LED2_GPIO,LED2_PIN);
      Delay_ms(200);
      
      if(fifo_pop(&print_uart_rx,&ch) == 0)
      {
            gpio_bits_toggle(LED4_GPIO,LED4_PIN);
            stdout_putchar(ch);
      }
    }
}

下面移植串口shell:nr_micro_shell。
首先下载nr_micro_shell源码,添加到工程目录。



然后添加头文件路径:


下面配置shell。主要是如下配置函数,其他的按需要配置。


最后需要添加nr_micro_shell.h,以及初始化和字符输入处理。

串口助手测试效果


程序:


页: [1]
查看完整版本: 【AT-START-F423测评】+串口测试及nr_micro_shell移植