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

本文介绍了在AT32F423微控制器上使用UART进行串口通信,包括初始化过程、中断接收数据并通过FIFO缓存、实现printf打印以及移植RTOS串口shell的功能。
摘要由CSDN通过智能技术生成

本次主要测试一下串口。使用中断接收数据。串口初始化:

复制

/**

  * [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):
---------------------
作者:WoodData
链接:https://bbs.21ic.com/icview-3336530-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值