一:雅特力芯片介绍:
编译软件:MDK5.38a,调试器使用板载的AT-DAP调试器
AT32串口知识介绍:
通用同步异步收发器(USART)是一个能通过多种不同的配置与使用不同的数据格式的外设进行通信的通用接口,同时支持异步全双工,异步半双工以及同步传输。 USART 提供了可编程的波特率发生器,根据系统频率以及分频系数的不同,用户可以通过配置系统时钟以及分频系数以此产生所需要的特定通信频率。
USART 除了支持标准的 NRZ 异步以及同步收发通信协议外,还支持一些常用的其他类型的串行通信协议,如 LIN(局域互联网), IrDA(红外数据组织) SIRENDEC 规范, ISO7816-3 标准的异步智能卡协议,以及 CTS/RTS(Clear To Send/Request To Send)硬件流操作, RS485 和 Modbus。
USART 还支持多处理器通信, 以及可配置通过空闲帧或地址匹配唤醒的静默模式,以此搭建 USART 网络, 并且同时支持使用 DMA 进行数据的收发,以此实现高速通信。
USART支持双时钟域, PCLK有系统时钟分频后得到, USART_CLK来源可以是PCLK或HICK或LEXT,这使得 USART 可以工作在 DEEPSLEEP 模式,并支持低功耗唤醒功能。
硬件连接:
硬件软件需要将 JP2处的引脚,连接到串口1的发送引脚:
二:串口代码编写步骤:
l 首先串口时钟使能,GPIO时钟使能:
l GPIO端口模式设置:
l 串口参数初始化:
l 开启中断并且初始化
l 使能串口:
l 编写串口发送函数:重映射PRINTF 函数进行数据的发送。
三:软件代码:
void uart_print_init(uint32_t baudrate)
{
gpio_init_type gpio_init_struct;
#if defined (__GNUC__) && !defined (__clang__)
setvbuf(stdout, NULL, _IONBF, 0);
#endif
/* 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);
/* condiv 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;
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);
/* condiv uart param */
usart_init(PRINT_UART, baudrate, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(PRINT_UART, TRUE);
usart_enable(PRINT_UART, TRUE);
}
这里需要重定义一下 printf函数:
PUTCHAR_PROTOTYPE
{
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;
}
主函数如下:
system_clock_config();
at32_board_init();
uart_print_init(115200);
/* output a message on hyperterminal using printf function */
printf("usart printf example: retarget the c library printf function to the usart\r\n");
while(1)
{
printf("usart printf xin cha cha Number: %u\r\n",number++);
delay_sec(1);
}
打开串口调试工具:
配置串口的波特率115200,选择端口号,配置:校验位 :无校验 停止位:1位
全部评论