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

[复制链接]
1688|0
 楼主| WoodData 发表于 2023-10-28 11:16 | 显示全部楼层 |阅读模式
本次主要测试一下串口。使用中断接收数据。串口初始化:
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]  initialize uart
  3.   * @param  baudrate: uart baudrate
  4.   * @retval none
  5.   */
  6. void uart_print_init(uint32_t baudrate)
  7. {
  8.     gpio_init_type gpio_init_struct;

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

  12.     gpio_default_para_init(&gpio_init_struct);

  13.     /* configure the uart tx pin */
  14.     gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  15.     gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  16.     gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  17.     gpio_init_struct.gpio_pins = PRINT_UART_TX_PIN | PRINT_UART_RX_PIN;
  18.     gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  19.     gpio_init(PRINT_UART_TX_GPIO, &gpio_init_struct);
  20.     gpio_pin_mux_config(PRINT_UART_TX_GPIO, PRINT_UART_TX_PIN_SOURCE, PRINT_UART_TX_PIN_MUX_NUM);
  21.     gpio_pin_mux_config(PRINT_UART_RX_GPIO, PRINT_UART_RX_PIN_SOURCE, PRINT_UART_RX_PIN_MUX_NUM);
  22.    
  23.     /* configure uart param */
  24.     usart_init(PRINT_UART, baudrate, USART_DATA_8BITS, USART_STOP_1_BIT);
  25.     usart_transmitter_enable(PRINT_UART, TRUE);
  26.     usart_receiver_enable(PRINT_UART, TRUE);
  27.     /* enable usart RX interrupt */
  28.     usart_interrupt_enable(PRINT_UART, USART_RDBF_INT, TRUE);
  29.     usart_enable(PRINT_UART, TRUE);
  30.    
  31.     nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  32.     nvic_irq_enable(PRINT_UART_IRQn, 0, 0);
  33. }
中断接收,通过fifo缓存方式存储接收的数据。
  1. /**
  2.   * @brief  this function handles usart1 handler.
  3.   * @param  none
  4.   * @retval none
  5.   */
  6. void USART1_IRQHandler(void)
  7. {
  8.     if(usart_flag_get(PRINT_UART, USART_RDBF_FLAG) != RESET)
  9.     {
  10.         gpio_bits_toggle(LED3_GPIO,LED3_PIN);
  11.         fifo_push(&print_uart_rx,usart_data_receive(PRINT_UART));
  12.     }
  13. }

下面实现printf打印。首先在pack内选择如下:
2.jpg

然后添加  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以及串口发送接收数据:
  1. int main(void)
  2. {
  3.     uint8_t ch;
  4.     volatile int32_t i=0;
  5.    
  6.     system_clock_config();
  7.     SysTick_Config(SystemCoreClock/1000);
  8.    
  9.     at32_led_init();
  10.     at32_button_init();
  11.     uart_print_init(115200);
  12.     printf("at32f423 board print test.\r\n");
  13.     while(1)
  14.     {
  15.         gpio_bits_toggle(LED2_GPIO,LED2_PIN);
  16.         Delay_ms(200);
  17.         
  18.         if(fifo_pop(&print_uart_rx,&ch) == 0)
  19.         {
  20.             gpio_bits_toggle(LED4_GPIO,LED4_PIN);
  21.             stdout_putchar(ch);
  22.         }
  23.     }
  24. }
1.jpg

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

然后添加头文件路径:
5.jpg

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

最后需要添加nr_micro_shell.h,以及初始化和字符输入处理。
7.jpg
串口助手测试效果
8.jpg

程序:
demo.zip (1.47 MB, 下载次数: 16)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

4784

帖子

28

粉丝
快速回复 在线客服 返回列表 返回顶部