|
有幸参加了ST最新的G4系列MCU的测评。之所以会选择参加G4系列MCU的测评,是看中了G4系列优越的性能和较高的性价比,G4作为F3的升级系列,主频高达170MHz,内嵌了数学运算加速器,具有丰富的内置数模外设,运放、比较器、DA、AD等,硬件加密使用的是AES-256,带有双安全存储区域。 手头正好有电机控制方面的项目,准备选型一款合适的MCU,而G4系列典型应用之一正是电机控制,不巧的是收到开发板时订购的BLDC评估板一时半会还到不了手,临时改变评测项目,已经量产的工业仪器MCU替换为G474,看功能和性能方面是否可以达到或超越现有的MCU。 到手的Nucleo-G474开发板,先来张特写。
Nucleo-G474的板载烧写器MCU已经不是传统的STM32F103了,而是升级到了STM32F723,唯一遗憾的是烧写器和主板是一体的了,不是传统的间断连接方式,不能和主板分离,成为一个单独的烧写器。 为方便测试,且最大限度保护好Nucleo-G474原板,不直接在原板上焊接连线,特地打了1片专用测试板。这里要感谢下深圳某创PCB专业制造公司,速度快,还便宜,只要5块钱,且SF包邮(前提是尺寸不能超过10X10CM)。测试板上包括本次评测要用的外围电路,包括指示灯、RS232串口、DA、AD、CAN-FD,其中CAN-FD将放在后期测试。; S1 |+ D* P4 M* @8 @7 G) P# h# D 首先测试传统的点灯,板载Led和自制Led交替点亮。用CubeMX配置好硬件资源,keil5编译程序,然后将程序下载到Nucleo-G474开发板,注意初次擦除烧写会报错,解决方法是从官网下载STSW-LINK007升级,就可以下载程序了。 程序运行效果如下所示:4 \1 {1 c: M1 \+ f* f8 m
接下来就是测试最主要的部分,手头已量产的产品是专用的传感器,MCU通过DA模块输出控制电压(电压大小需根据不同的环境可调),AD模块采集不同的被检测对象所对应的模拟量大小并转换成数字量,主控程序根据采集到的数字量大小,输出对应的控制。
CubeMX配置G474的资源如下图所示:% k/ D( ?. N5 ~% @
Main主程序:* ?" E: ?2 E2 e" D' b 9 s5 W; Q5 u0 c: G/ L3 C, m, Q7 ~3 ~ int main(void); l$ u1 t7 t0 g, ~) H0 ^, }: m$ b- _ { 4 r- w1 K) O$ e /* USER CODE BEGIN 1 */ button_no = 0; ) |! k8 W. p/ R: n4 {2 G /* USER CODE END 1 */ " i2 Q* l2 a. f3 P. m /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); 3 t! N5 c9 q& U+ s /* USER CODE BEGIN Init */ 3 k/ j s+ G$ m. A' F6 E /* USER CODE END Init *// F- |: p% A+ T9 O0 H /* Configure the system clock */ s. J2 k% T% k: s # h3 Q% f& ^* l9 e SystemClock_Config();" T' k7 } B+ l$ ~1 T, c- _ /* USER CODE BEGIN SysInit */) i! s; k" x- C( p, A { /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); 0 @8 c H7 K6 ^2 _- j/ T4 h! i8 W MX_TIM3_Init(); ( O1 ]' L6 d: S MX_UART4_Init(); 1 y, S5 i( K" N# F6 ]# @4 J7 Z MX_ADC2_Init(); MX_DAC2_Init(); # i8 W- `/ |; j7 d! M% m /* USER CODE BEGIN 2 */ ( _" N9 b' @ C: ]* o. v7 P if (HAL_DAC_Start(&hdac2, DAC_CHANNEL_1) != HAL_OK) 8 h, v# X" | C. ~# F { Error_Handler(); }- [9 w c& a4 I5 o if (HAL_DAC_SetValue(&hdac2, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 1024) != HAL_OK) { Error_Handler(); } if (HAL_ADC_Start(&hadc2) != HAL_OK) { Error_Handler(); }3 B4 a; R9 c: p* `5 L. u AD_Sample = 0; AD_Sample = HAL_ADC_GetValue(&hadc2); 0 c3 l4 P5 D7 K6 D, ~1 p __HAL_ADC_CLEAR_FLAG(&hadc2, ADC_FLAG_EOS); /* USER CODE END 2 */ /* Infinite loop */8 g. b: Q% G. U' v /* USER CODE BEGIN WHILE */ 1 N& w7 t! d$ j6 _1 B- M6 L( ] while (1) { /* USER CODE END WHILE */+ Z2 @4 y5 N x& h/ C" r9 ?" B . b& i3 X+ H5 X0 w /* USER CODE BEGIN 3 */1 ~, A/ b# Q/ U N if (HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin) == 0x01U)- c, q9 H' C! _ { button_no = 0x01U; } else( _2 x& ^9 k& w+ k" f. I3 B button_no = 0x00U;; G( ~5 C$ J) H$ I* \$ M% z, Z+ i9 E HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);9 c5 H$ @$ r1 R0 h' m' t7 v HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin); 9 [7 }" X6 b+ w* C& p5 z1 K4 [ if (HAL_ADC_Start(&hadc2) != HAL_OK) { Error_Handler(); }+ R' G0 G. i' s# C" w# r& ^# |; I HAL_Delay(50);$ J" X* d- X0 U5 j5 [$ K, z AD_Sample = 0; if (HAL_ADC_PollForConversion(&hadc2, 10) == HAL_OK)1 h1 |% O( Q' I* c% ~: ^0 P8 m {8 R7 g4 r6 Q* Z, ?* g AD_Sample = HAL_ADC_GetValue(&hadc2); 7 \# s) V U# I0 T* F sprintf(aTxBuffer,"AD value = %5d ",AD_Sample);2 K- n) O5 }- K# _( N& a$ ? if (HAL_UART_Transmit(&huart4, (uint8_t *)aTxBuffer, 26, 5000) != HAL_OK). W0 `+ U6 {; k {4 s5 R J" P0 V9 g Error_Handler(); } __HAL_ADC_CLEAR_FLAG(&hadc2, ADC_FLAG_EOS);# R5 J( _& `) m* Y. d. \; x H /* Insert delay 100 ms */ if (HAL_ADC_Stop(&hadc2) != HAL_OK) { Error_Handler(); } if (button_no == 0x00U) HAL_Delay(2000);$ {; [, B! z% t! k) K else HAL_Delay(100); }. }, G" T1 Y7 p } ( g' H9 L+ k9 w" x /* USER CODE END 3 */, `' m' w3 f7 N! N }1 ~7 t8 ^) T6 o 4 W! O1 e5 E$ m, K 7 }, `: D# X: e 测试结果:* E! U9 f: }5 M' x& r- [+ ~1 j 下图为传感器中没有被检测对象时采集到的数据:
检测较小物体时采集到的数据:
检测较大物体时采集到的数据:
以上所有检测数据为每秒采集一次,通过RS232串口传输到PC显示,该数据为AD模块的原始数据,分辨率12bit,未经任何算术平均以及数字滤波处理。从采集的结果看,AD模块的精度完全满足项目的需要。 1 n' T& u$ E/ u& ~8 l由于时间不是很充裕,G474的很多优异性能尚未加以测试,尤其项目中要用的CAN总线,由于G4系列的CAN已升级为CAN-FD,手头尚没有对应的带CAN-FD的上位机进行测试,只能留待后期硬件条件具备时再做进一步测试。 |
| 顶一顶 |
点赞!!! |
STM32G47x 双 Bank 模式下在线升级
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【经验分享】STM32G4之基本定时器
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
经验分享 | STM32G4双BANK启动应用演示
STM32G4 LPTIM+DMAMUX 实现并行输出应用示例
实战经验 | LAT1578 SAU对NSC分区的影响
经验分享 | STM32G474 HRTIM Triggered-half模式实现两相交错电源180°相位同步方案
STM32大神笔记,超详细单片机学习汇总资料
微信公众号
手机版