连接方式
如图所示:
注意, STLINK-V3 CN2的丝印RT并不需要交叉:
STM32G474 | STLINK-V3 |
---|---|
USART2_RX | CN2_RX |
USART2_TX | CN2_TX |
GND | CN4_GND |
STLink V3
V3有两种版本: STLINK-V3SET, STLINK-V3 mini, 如图所示:
主控芯片都是STM32F723IEK6, 众所周知, STM32F7x3 和 STM32F730是有内部Hi-speed PHY的, 配置后USB直接出来就是高速可到480Mbps.
对于VCP(Visual Com Port), STLINK-V3支持到15MHz, 这很美滋滋, 也突破了Full-Speed USB 12Mbps的限制.
如果测试12Mbps及以下, 也有一些USB转串口的片子是支持的, 比如FT260芯片, 10元出头的价格也还能接受.
STM32工程搭建
STM32CubeMX配置步骤如下:
-
MCU选择: 打开
STM32CubeMX
, 点击ACCESS TO MCU SELECTOR
, 选择STM32G474VETx
-
调试端口配置为SWD:
Pinout & Configuration
->System Core
->SYS
->Debug
选择Serial Wire
-
Pinout & Configuration
->System Core
->RCC
->HSE
选择Crystal/Ceramic Resonator
-
Clock Configuration(我板子上用的外部12M晶振, 主频配置成160MHz):
-
开启1ms定时器中断:
Pinout & Configuration
->Timers
->TIM6
-> 勾选Activated
,Prescaler
设置为160-1
,Counter Period
设置为1000-1
-> 勾选TIM6中断:
-
USART2配置:
Pinout & Configuration
->Connectivity
->USART2
->Mode
选择异步Asynchronous
, 过采样(Over Sampling
)配置为8 Samples
, 关闭Overrun
和DMA on RX Error
, 波特率配置为14M-8-N-1, 更改默认引脚(PA2 PA3)到板子实际用的(PD5 PD6): -
Project Manager
->Project
->Browse
选择工程位置(Project Location
), 填入工程名(Project Name
),Toolchain/IDE
选择MDK-ARM
, 把Minimum Heap Size
改为0x1000
,Minimum Stack Size
改为0x1000
. -
Project Manager
->Code Generator
-> 勾选Copy only the necessary library files
, 还有Generate peripheral initialization as a pair of .c/.h files per periphral
-
点击右上角
GENERATE CODE
按钮生成代码, 点击Open Project
按钮打开工程.
Keil配置, Keil 点击魔术棒或者Project
-> Options for Target ...
, 默认配置Debug
为ST-link Debugger
, 点击Setting
:
Flash Download
选项卡 -> 勾选Reset and Run
, 这样下载后可以自动复位运行.Pack
选项卡, 去掉默认的Enable
勾选
到此配置结束.
添加代码
main.c
添加代码:
/* USER CODE BEGIN PV */
uint8_t tim6_flag = 0;
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
uint16_t i;
uint8_t arr[1000];
arr[0] = '\n';
arr[999] = '\n';
for(i = 1; i < 999; i++) {
arr[i] = 'A' + (i-1) % 26;
}
HAL_TIM_Base_Start_IT(&htim6);
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(tim6_flag) {
tim6_flag = 0;
HAL_UART_Transmit(&huart2, arr, 1000, 1);
}
}
/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM6) {
tim6_flag = 1;
}
}
/* USER CODE END 4 */
测试
14M-8-N-1, 约1MB/s, 1000字节/ms, 当然和上位机的配合之类的也有关, 实际测试结果如下:
21s大概接收了1700万字节, 约 800KB/s, 与理论有一点点差距, 建议实际使用保守一些, 负载率不要太高, 限制在500KB/s以内为宜.
高波特率的意义
- MCU与MCU的串口通信
- 用串口打印做CAN分析仪
工程代码
微信公众号
欢迎扫描二维码关注本人微信公众号, 及时获取或者发送给我最新消息: