▲
点击上方 关注
STM32
来源:EEWORLD论坛网友常见泽1版权归原作者所有
一
、
选择GPIO
NUCLEO板预留了很多板载接口,可以随便找一个输出口做测试,这里选用PF4。
二、GPIO配置
GPIO_OSPEEDR寄存器,控制GPIO速度,
速度一共分为四档。
三、程序编写
/*Configure GPIO pin : PF4 */
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
通过GPIO_SPEED_FREQ_LOW参数修改速度,同时配置时钟,让输出匹配到时钟的速度。
四
、
测试情况
翻转程序注意有几点:
-
不要使用库函数测试,占用时间
-
不要跳转到while测试也会占用时间
翻转测试,依据数据手册,HSLV OFF见上图,在选项字节里
GPIO_SPEED_FREQ_VERY_HIGH
HSLV OFF情况下测试。测试结果:
11 大概不到170MHz,GPIO_SPED_FREQ_VERY_HIGH。
10 高速
01 输出到75MHz 左右,再大波形就完全失真了。
再增加翻转速度,波形消失,如下图所示。
00 输出50 60MHZ波形完全没有降低波形测试,
30MHZ波形也不行,继续降低至
20MHZ,波形差不多了。
测试下来,基本配置的速度足够快的话,
GPIO翻转速度很快
。
一
、
USART硬件选择
选择一个板载的USART,
看下数据手册这两个管脚。
二
、
USART介绍
STM32的参考手册中,串口USART ((Universal Synchronous Asynchronous Receiver and Transmitter, 通用同步异步收发器), 是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们一般用的串口通信基本都是 UART,也就是 Asynchronous 异步的UART,后续生成工程的时候需要注意。
STM32H5的串口特性如下图:
三、
创建工程
在之前的工程基础上,时钟按照之前250M,
直接开始串口的配置。
生成工程
生成工程后,打开工程,在main.c里加入一段代码,
我这里选用的是UART3。
/* USER CODE END 0 */
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 2);//huart根据你的配置修改
return ch;
}
这个问题纠结了有几十分钟,最终解决办法是点击重新编译即可。
四
、
测试情况
一、时钟
STM32H5的时钟树结构图如下所示:
时钟的输出可以通过复用口也是常说的MCO功能。
二、创建工程
时钟RCC配置里选择MCO功能,MCO1和MCO2的时钟源选择是不一样的,如下图所示:
三、时钟测试
1、测试最大的系统频率,
标称应该最大的输出是250MHz。
从上面的MCO2才能输出系统时钟,
输出肯定是没有问题的。
往上增加主频测试,系统时钟继续增加,
系统时钟增加到330M,可以输出。
再往上就不行了,波形没了。
2、测试LSI波形
LSI低速内部时钟,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。
LSI的波形如下图所示:
32.05KHZ在手册里的min max之间。
3、测试外部晶振8M波形
HSE是高速外部时钟,
可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~50MHz。
板载的默认的外部时钟是8MHz。
4、测试内部时钟HSI波形,
HSI高速内部时钟
内部时钟如下图所示:
怎么是32MHz的,内部时钟不是64MHz吗?翻手册。
是由于这边的一个二分频导致的
,
内部时钟也就是32.05*2=64.1MHz。
在手册范围之内,
时钟就测试到这里了。