本帖最后由 聪聪哥哥 于 2025-6-17 16:00 编辑
在测评AT32开发板得时候,为了方便与PC端进行交互,这里使用单片机的串口输出一些调试信息方便,方便调试。
一:串口知识分享:
通用同步异步收发器(USART)是一个能通过多种不同的配置与使用不同的数据格式的外设进行通信的通用接口,同时支持异步全双工,异步半双工以及同步传输。USART 提供了可编程的波特率发生器,根据系统频率以及分频系数的不同,用户可以通过配置系统时钟以及分频系数以此产生所需要的特定通信频率。
USART 除了支持标准的 NRZ 异步以及同步收发通信协议外,还支持一些常用的其他类型的串行通信协议,如 LIN(局域互联网),IrDA(红外数据组织)SIRENDEC规范,ISO7816-3标准的异步智能卡协议,以及 CTS/RTS(Clear To Send/Request To Send)硬件流操作,RS485 和 Modbus。USART 还支持多处理器通信,以及可配置通过空闲帧或地址匹配唤醒的静默模式,以此搭建 USART 网络,并且同时支持使用 DMA 进行数据的收发,以此实现高速通信。
二:AT32 图形化配置如下所示:
2.1 硬件连接方式
这里使能PA9 PA10串口1与调试器的串口相连。
2.2 AT32 work bench 软件配置如下所示:
三:软件编写:
- void wk_usart1_init(void)
- {
- /* add user code begin usart1_init 0 */
- /* add user code end usart1_init 0 */
- gpio_init_type gpio_init_struct;
- gpio_default_para_init(&gpio_init_struct);
- /* add user code begin usart1_init 1 */
- /* add user code end usart1_init 1 */
- /* configure the TX pin */
- gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE9, GPIO_MUX_7);
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
- gpio_init_struct.gpio_pins = GPIO_PINS_9;
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
- gpio_init(GPIOA, &gpio_init_struct);
- /* configure the RX pin */
- gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_7);
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
- gpio_init_struct.gpio_pins = GPIO_PINS_10;
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
- gpio_init(GPIOA, &gpio_init_struct);
- /* configure param */
- usart_init(USART1, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
- usart_transmitter_enable(USART1, TRUE);
- usart_receiver_enable(USART1, TRUE);
- usart_parity_selection_config(USART1, USART_PARITY_NONE);
- usart_hardware_flow_control_set(USART1, USART_HARDWARE_FLOW_NONE);
- /**
- * Users need to configure USART1 interrupt functions according to the actual application.
- * 1. Call the below function to enable the corresponding USART1 interrupt.
- * --usart_interrupt_enable(...)
- * 2. Add the user's interrupt handler code into the below function in the at32m412_416_int.c file.
- * --void USART1_IRQHandler(void)
- */
- /* add user code begin usart1_init 2 */
- /* add user code end usart1_init 2 */
- usart_enable(USART1, TRUE);
- /* add user code begin usart1_init 3 */
- /* add user code end usart1_init 3 */
- }
在主程序中添加 输出代码如下所示:
- while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
- usart_data_transmit(USART1, point);
- // while(usart_flag_get(USART1, USART_TDC_FLAG) == RESET);
- point++;
- delay_sec(1);
四:使用串口工具检测 单片机发出的数据如下所示:
实际使用心得:使用软件配置底层驱动函数,很方便,在串口的初始化中,已经把串口的使能,所以我们在使用的时候也无需使能代码。
|