打印
[AT32F423]

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

[复制链接]
912|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WoodData|  楼主 | 2023-10-28 11:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本次主要测试一下串口。使用中断接收数据。串口初始化:
/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  initialize uart
  * @param  baudrate: 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缓存方式存储接收的数据。
/**
  * @brief  this function handles usart1 handler.
  * @param  none
  * @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,以及初始化和字符输入处理。

串口助手测试效果


程序:
demo.zip (1.47 MB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

4395

帖子

25

粉丝