一、创意方案
本方案旨在设计一款基于 STM32U575CIU6Q 微控制器的最小系统,用于评估和开发基于STM32U575CIU6Q的应用程序。该系统包括了微控制器运行所需的所有基本组件,如时钟源、电源管理、复位电路、USB和调试接口,同时保持了设计的简洁性和成本效益。将所有的 IO 管脚全部引出,今后可以作为嵌入式项目开发的原型验证开发板。
二、方案器件介绍
主控:STM32U575CIU6Q
STM32U575CIU6Q 是 STMicroelectronics 公司生产的 STM32U5 系列超低功耗微控制器家族中的一员。它基于高性能的 Arm® Cortex®-M33 32 位 RISC 内核,工作频率高达 160 MHz。
主要特性:
- 超低功耗: 支持 FlexPowerControl 技术,提供多种低功耗模式,包括 LPBAM,使外设即使在 Stop 模式下也能自主运行。
- 安全特性: 符合 Arm® TBSA 要求,支持安全启动、安全数据存储和安全固件更新。具有 HASH 硬件加速器和真随机数生成器等安全功能。
- 内存: 包含高达 2 MB 的闪存和 786 KB 的 SRAM,以及外部存储器接口和 Octo-SPI 内存接口。
- 丰富的外设: 提供 136 个快速 I/O 线路、多种定时器、看门狗定时器、多种通信接口(包括 USB Type-C®、USB OTG、I2C、USART、SPI、CAN、SDMMC)以及图形和音频处理功能。
- 多种封装: 提供 48 到 169 引脚的多种封装选项。
DC-DC芯片:TLV62568DRL
TLV62568DRL 是一款由德州仪器(TI)生产的同步降压 DC-DC 转换器,专为高效和紧凑型解决方案而设计。它采用 SOT-563-6 封装,尺寸为 1.60mm x 1.60mm,适合空间受限的应用。
主要特性:
- 高效率: 效率高达 95%,即使在轻载条件下也能保持高效率。
- 低 RDS(ON): 可在 150mΩ 和 100mΩ 之间切换,降低损耗。
- 宽输入电压范围: 2.5V 至 5.5V,适应多种电源输入。
- 可调输出电压: 0.6V 至 VIN,满足不同输出电压需求。
- 省电模式: 轻载时自动进入省电模式,降低功耗。
- 100% 占空比: 低压降,适用于低电压输出应用。
- 低静态电流: 35µA,延长电池寿命。
- 1.5MHz 开关频率: 降低电磁干扰,提高效率。
- 电源正常输出指示: TLV62568P 提供电源正常输出指示功能。
- 保护功能: 过流保护、热关断保护、内部软启动等。
三、原理图及PCB介绍
整体原理图如下,使用 STM32U575CIU6Q 芯片,具有高性能的 Arm® Cortex®-M33 32 位 RISC 内核,工作频率高达 160 MHz。芯片选择的是U5系列带Q型号的,Q型号的芯片内置了开关电源,可以进一步提高效率。在最小系统板上集成了最核心的功能,通过 Type-C 端口提供 5 V 给 DC-DC 模块,同时由板上DC-DC芯片得到的3.3V通过管脚输出向芯片供电。将调试接口引出,可以外接SWD调试器,方便后续的调试功能,为原型验证提供更灵活、更具性价比的选择。
USB电路:
由Type-C从外部取电,向内部电路提供5V ,为了保护后级电路,所以串联了保险丝在VBUS上。为了保证使用双C口数据线,需要在CC1、CC2下拉电阻。
DC-DC电源模块:
核心电路:
核心电路保留了晶体振荡器电路,外部时钟输入16M,为了芯片可以低功耗,再放置一个32.768k的晶体。剩下的所有IO口连接到板子的边缘,作为扩展。
调试接口:
为了使用DAP-Link进行调试,按照调试器的管脚排布了芯片的调试管脚。接口中包含了供电、串口、SWD接口、复位和SWO功能。
PCB绘制和3D图:
PCB实物:
四、软件代码
对于最小系统是否能正常工作的测试,采取了最简单的点亮呼吸灯测试。
首先是使用配置工具,生成外设初始化代码
主程序初始化外设,并在while循环中,不断改变占空比实现呼吸灯。
TIM_HandleTypeDef htim2;
//定时器外设初始化
/* TIM2 init function */
void MX_TIM2_Init(void)
{
/* USER CODE BEGIN TIM2_Init 0 */
/* USER CODE END TIM2_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM2_Init 1 */
/* USER CODE END TIM2_Init 1 */
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 159;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 79;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM2_Init 2 */
/* USER CODE END TIM2_Init 2 */
HAL_TIM_MspPostInit(&htim2);
}
int main(void)
{
//主程序初始化外设,并在while循环中,不断改变占空比实现呼吸灯
/* USER CODE BEGIN 1 */
static uint8_t CNT=0,CMP=0,DIR =0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_FLASH_Init();
MX_USB_OTG_FS_PCD_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
if(DIR==1)
{
CMP++;
if(CMP > 159)
{
DIR = 0;
}
}
else
{
CMP--;
if(CMP < 1)
{
DIR = 1;
}
}
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,CMP);
HAL_Delay(5);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
五、成品功能测试
烧录代码后,可以看见LED进入呼吸状态,使用示波器测量管脚,也能看到变化的方波
六、总结
在本次实践中,将之前一直想做的最小系统给完成了。在之前的学习中,总会碰上一些需要验证的东西。苦于没有一个扩展IO够多的核心系统。在这次活动中终于将以前的想法转化成现实。这一过程不仅加深了我对STM32U575CIU6Q单片机功能的理解,也培养了我对技术操作的耐心和精细度。期待这项活动能够不断改进,吸引更多技术爱好者加入,共同探索和学习STM32U575CIU6Q的丰富应用。
感谢电子森林,感谢得捷,希望活动越办越好!