任务介绍
任务一: 用于简易示波器/频谱仪/信号发生器的核心板,这里将原本的STM32G031微控制器换为了STM32G474微控制器,并且板载STLink_V2.1和常用的485,CANFD等通讯接口。
模块介绍
本次设计的核心板模块主要基于STM32G474进行设计,它拥有5.4GHz的高精度定时器和三路CANFD,可以适用与绝大部分应用场景。本次的设计主要考虑的是其扩展性,尽可能多的将引脚引出来,保证实现功能的情况下,还特意引出了一路CANFD,一路RS485,一路USART,一路USB,同时板载了STLink_V2.1下载器。电源方面支持3.3-38v供电,满足绝大部分使用场景。
选型介绍
器件型号 | 类型 | 关键特性 | 应用场景 |
---|---|---|---|
STM32G474CEU6 | 32位微控制器 | - Arm Cortex-M4内核 @170MHz - 512KB Flash/128KB RAM - 丰富外设(ADC/DAC/PWM) - CAN/USART/SPI/I²C接口 - QFN48封装 | 主控制器,负责系统调度 |
SIT3088ETK | RS-485收发器 | - 3.0~5.5V供电 - 支持20Mbps高速通信 - ±15kV ESD保护 - SOP8封装 | 工业总线通信 |
RY8411 | 电源管理IC | - 4.5-40V宽输入范围 - 最大1A输出电流 - 过压/过流保护 - SOT223封装 | 供电稳压(24V→5V) |
TJA1051TK/3/1 | CAN总线收发器 | - 兼容ISO11898标准 - 最高1Mbps速率 - 总线容错±40V - SOIC8封装 | 汽车/工业CAN通信 |
XC6210B332MR | LDO稳压器 | 输入电压范围:2.0V~6.0V 输出电压:3.3V(固定) 输出电流:最大300mA 封装:SOT-25 低功耗,高精度(±1%) | 供电稳压(5V→3.3V) |
STM32F103CBU6 | ST-Link V2.1 | 72MHz主频 128KB Flash, 20KB RAM 支持USB 2.0全速接口 常用作调试器固件(如ST-Link V2) | 调试器 |
设计框图
原理图介绍
- 主控部分
采用STM32G474CEU6作为主控
- 电源部分
- 24V->5V采用RY8411,它具有4.5-40V宽输入范围 - 最大1A输出电流 - 过压/过流保护
- 5V->3.3V采用XC6210B332MR
- ST_LINK_V2.1
采用stm32f103cbu6为主控
- CANFD
采用NXP的TJA1051TK/3/1收发器
- RS485
采用SIT3088ETK
- 拓展IO
PCB介绍
pcb采用四成板设计,两个typec,一个作为usb,一个作为下载调试口,大部分器件都采用qfn封装,非常nice
软件介绍
软件部分必须注意一点,这块核心板为了将资源最大化,我将bootf脚复用为了CANFD_RX,导致这个芯片无法正常调试,必须采用软件boot的方式才可以正常调试使用。
有三个办法可以实现把BOOT0设置为软件BOOT0,这样PB8-BOOT0引脚就可以当作通用GPIO或者CANFD或者其他用途来使用了。
- 在程序中对Option Byte选项字的相关位进行编程,设置BOOT0为软件BOOT0,我看到HAL库中有相关操作,但是操作起来比较麻烦。
- 使用STM32CubeProgrammer来操作,这个软件可以通过STLINK\UART\USB\OTA来连接目标板来实现修改的功能。
- 使用STM32 ST-LINK Utility来操作,这个只能通过STLINK来连接目标板,连接上之后,点击Target,然后点击Option Bytes之后,按照下图修改即可实现目的:
这里演示第三种
我这里通过串口功能,来验证板子的正常
核心代码
int main(void)
{
/* USER CODE BEGIN 1 */
/* 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_USART1_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
printf("hello world \n");
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
功能展示图
将usb连接到debug口,既可以作为下载口,也可以作为串口
心得体会
通过本次 Make Blocks 活动,我深刻体验了从原理图设计→PCB布局→打板生产→焊接组装→调试纠错的完整闭环。其中最珍贵的收获,就是亲手将代码与铜箔熔铸成会呼吸的智能硬件——这种从虚拟到现实的创造魔力,远超任何仿真软件带来的成就感。