测试AT32F425单片机串口

串口数据调制信号

AD\Test\2024\September\Test125kHzAT32F425.SchDoc

ARM\Keil\AT32\Test\2024\September\Test125kHzAT32F425\Test125kHzAT32F425\project\MDK_V5\Test125kHzAT32F425.uvprojx

 

01 AT32F425单片机


一、前言

  由于需要制作与i个 125kHz 的低频调制信号,  下面利用单片机的定时器产生这样的信号。  输出的脉冲信号对串口输出脉冲信号的调制, 调制信号为 125kHz。  串口输出的波特率为 9600.  下面测试一下这个方案。

G5M1727624178_1920_1080.MP4|_-5

二、设计电路

  设计实验电路板。  单片机使用AT32F425, 这颗芯片也是刚刚购买到。 利用它的第二个串口输出来控制定时器1的 PWM输出。  这样便可以形成由串口数据调制的高频信号。  下面设计电路板。 单面布线, 适合一分钟制版。
G6M1727620683_1920_1080.MP4|_-6

AD\Test\2024\September\Test125kHzAT32F425.PcbDoc

▲ 图1.2.1 测试原理图

▲ 图1.2.1 测试原理图

▲ 图1.2.2 测试电路板

▲ 图1.2.2 测试电路板

  一分钟之后得到了测试电路板,  电路板制作的非常完美。  下面焊接调试。

G3M1727620769_1920_1080.MP4|_-3

三、焊接调试

  焊接电路,  清洗之后开始调试。 通过 DAP-LINK 下载软件。

G3M1727623305_1920_1080.MP4|_-3

  根据设计,  使用串口2 的输出控制 定时器1 的PWM输出, 完成串口数据的调制。 在 Workbench中, 打开定时器的 刹车引脚功能。  开启刹车的自动输出功能。

G4M1727623564_1920_1080.MP4|_-4

▲ 图1.3.1 AT32定时器配置

▲ 图1.3.1 AT32定时器配置

  下面测试输出信号。  UART2 发送 0x55 数据, 可以看到输出了五组脉冲, 符合串口数据调制规律。 在输出应该增加一个下拉电阻, 这样输出呈现高阻的时候, 输出电压很快降低到 0.  由此, 验证了串口数据调制的功能。

G3M1727623787_1920_1080.MP4|_-3

▲ 图1.3.2  输出调制PWM信号

▲ 图1.3.2 输出调制PWM信号

 

  结 ※


  文测试了串口数据调制 PWM的波形。  利用Time1的刹车功能, 将串口2 输出信号作为Time1的刹车信号,   这样便可以形成调制PWM信号。  由此, 便可以产生 125kHz 的低频调制信号。

G4M1727623930_1920_1080.MP4|_-4


● 相关图表链接:

<think>好的,我现在需要解决用户在使用AT32F402单片机时,调用uart_print_init函数后printf输出乱码的问题。首先,我得明确可能的原因,然后逐一排查。 首先,乱码最常见的原因是波特率设置不匹配。用户需要确认UART的波特率是否与接收端(比如串口调试助手)的设置一致。比如,如果单片机设置的是115200,而电脑端设置的是9600,肯定会乱码。这时候需要检查初始化代码中的波特率参数,并确保两端一致。 接下来,时钟源配置是否正确也是一个关键点。AT32系列单片机的外设时钟通常依赖于系统时钟的分频,如果系统时钟配置错误,比如主频设置不对,会导致UART的时钟计算错误,从而波特率偏差过大。例如,如果系统时钟应该是72MHz,但实际配置成了48MHz,那么UART的波特率生成就会出错。需要检查系统时钟配置函数,比如system_clock_config(),确认主频是否正确,并重新计算UART的波特率分频值。 另外,UART初始化代码可能有误。用户需要检查uart_print_init函数中的参数设置,包括数据位、停止位、校验位是否与接收端匹配。比如,8N1(8数据位,无校验,1停止位)是常见配置,如果设置成其他格式,接收端也需要相应调整。此外,还要确认使用的UART外设和GPIO引脚是否正确配置,比如TX和RX引脚是否映射正确,是否启用了复用功能。 硬件连接问题也不能忽视。需要检查TX和RX线路是否接反,或者存在接触不良、短路的情况。有时候,电平不匹配也会导致问题,比如如果单片机是3.3V电平而接收端是5V,可能需要电平转换模块,或者确认接收端是否支持3.3V输入。 还有重定向printf的问题。用户可能没有正确重定向fputc函数,导致数据无法正确发送到UART。需要检查是否在代码中实现了fputc的重定向,并确保发送函数使用正确的UART实例。例如,使用USART1的话,重定向函数应该调用USART1的数据发送函数。 此外,固件库版本或驱动问题也可能导致异常。如果使用的AT32标准库版本过旧或有已知bug,可能会影响UART功能。建议用户更新到最新版本的固件库,并参考官方示例代码进行比对。 最后,如果以上步骤都检查无误,但问题仍然存在,可能需要用示波器或逻辑分析仪测量实际输出的波形,确认波特率是否准确,以及数据传输是否符合预期。例如,测量一个字符的起始位、数据位和停止位的时间,计算实际的波特率是否与设定值相符。 在用户提供的引用中,提到了AT32F425开启高级访问保护后的一些限制,比如禁用SWD调试接口。虽然当前问题是关于AT32F402的,但需要注意如果用户错误地启用了类似的高级保护功能,可能会影响芯片的编程和调试。不过,F402的问题更可能集中在配置或代码层面,而非保护机制,除非用户确实进行了相关设置。 总结下来,解决步骤应该是:检查波特率设置,确认时钟配置,验证UART初始化参数,检查硬件连接,确保printf重定向正确,更新固件库,最后进行硬件测试。如果用户按照这些步骤排查,应该能找到问题所在并解决乱码问题。</think>### AT32F402 UART printf 乱码解决方案 #### 1. **检查波特率匹配性** - **问题原因**:UART发送端与接收端(如串口调试助手)的波特率不一致是导致乱码的常见原因。 - **解决步骤**: 1. 确认`uart_print_init`函数中设置的波特率(如`115200`)与接收端工具(如PC端串口助手)的波特率完全一致。 2. 检查UART初始化代码中的分频系数是否正确。例如,若系统时钟为$72\ \text{MHz}$,波特率为$115200$,分频值应为: $$ \text{Div} = \frac{72\ \text{MHz}}{16 \times 115200} \approx 39.0625 $$ 需确保整数部分和小数部分配置正确[^1]。 #### 2. **验证系统时钟配置** - **问题原因**:若系统时钟(如HCLK)未正确配置,UART的时钟分频计算会出错,导致实际波特率偏差。 - **解决步骤**: 1. 检查`system_clock_config()`函数,确认主时钟频率(如$72\ \text{MHz}$)。 2. 使用示波器测量UART的TX引脚波形,计算实际波特率是否匹配。例如,发送字符`0x55`(二进制`01010101`),测量单个位的时间$T$,则波特率为: $$ \text{Baud Rate} = \frac{1}{T} $$ #### 3. **检查UART初始化参数** - **问题原因**:数据位、停止位或校验位配置错误会导致数据解析异常。 - **解决步骤**: 1. 确认UART初始化参数与接收端一致(通常为`8N1`,即8位数据、无校验、1位停止位)。 ```c USART_InitType USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; ``` #### 4. **检查printf重定向代码** - **问题原因**:未正确重定向`printf`到UART,或发送函数未选择正确的外设。 - **解决步骤**: 1. 实现`fputc`函数重定向(需包含`stdio.h`): ```c int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t)ch); // 确保此处为实际使用的UART实例(如USART1) while (USART_GetFlagStatus(USART1, USART_FLAG_TXBE) == RESET); return ch; } ``` #### 5. **排查硬件问题** - **问题原因**:TX/RX线路接反、接触不良或电平不匹配。 - **解决步骤**: 1. 用万用表测量UART的TX引脚电压,确认信号正常(空闲时为高电平)。 2. 检查是否需外接电平转换芯片(如CH340G)以匹配PC端的USB-TTL模块。 #### 6. **更新固件库与参考示例** - **问题原因**:旧版固件库可能存在UART驱动兼容性问题。 - **解决步骤**: 1. 从官方获取最新AT32F402标准库,替换现有驱动文件。 2. 参考官方UART示例代码(如`uart_print`例程)对比初始化流程。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值