本帖最后由 muyichuan2012 于 2023-3-30 10:33 编辑
一、问题的提出 最近有个测试,采用国产MCU替换STM的可能性、兼容性、开发容易性、性能差别等。 申请了几家具有相关相同的MCU公司,有3个公司有相应: ARTERY雅特力、GEEHY极海、WCH沁恒微三家公司的芯片样片申请响应: ARTERY雅特力 AT32F407VTG7 5片 GEEHY极海 APM32F407VET6 3片 CH沁恒微 CH32V307VCT6 2片 +一块V307的开发板 我们设计的测试版数以紧凑型的,设计时按照STM同级芯片兼容性,考虑了如下因素: 1. 具有SFMC的LCD控制系统; 2. 将PC0-3作为4线串口LCD独立引出驱显串口黑白小屏; 3. 按照STM32CubeMX设计至少1-3路ADC,USART,SPI,I2C,EXINT,A0按键等; 4. 板子兼容所有100引脚LQFP的同类MCU,因为他们的引脚只有少数几个不同; 5. 5X5CM的PCB,正面引脚-WSP-串口LCD等,背面连接SFMC LCD,一般只焊接8MHz晶振。 二、测试方法 同时焊接: 1. 按照芯片将PCB引脚裁连接好; 2. 先仅仅焊接电源引脚和SWD两个引脚,按照1+1+1结束; 3. 连接SWD或JTAG测试芯片是否正常——如果正常可以被识别出来——因为在此前买过3片两片不能识别退货了的情况; 4. 3通过,将所有元器件焊接准备测试。 结果如下: 焊接APM第一片,没有识别,静态电流190mA;接着焊接第二片结果照旧静态电流也是190mA;第三片没有焊接。 焊接CH的第一片,没有识别,但静态电流很小,符合芯片还处于萌芽,第二片还没有焊。 AT芯片最给力,焊接了两片都正常可以进入测试环节。 可以说焊接方法都一样,结果非常令人沮丧。我们申请芯片最多3片而不是5片,实际如上所述,只有AT厂家直接寄了5片,结果盈余了。另外两家都只剩一片处于分析等待期。 目前只能针对AT的芯片做测试。 三、兼容性测试 1. 直接用STM32、GD32的工程,仅仅改或不改芯片选择,下载测试非常有趣: STM32F103Vxxx的工程,芯片不改直接可以运行;改了有些可以运行; STM32F103V、Z系列几乎都可以 STM32F4xxV系列部分可以 GD32F103V、Z系列也几乎可以 GD32F207V系列也可以 2. 串口黑白LCD调试 2.1 工程采用AT32F403a_407_Fireware_Library_V2.1.4 所有方法:先找最接近的exammple,而后见需要的相应工程文件夹直接拷贝过来,配置工程选项并且设置文件路径,在过程中添加文件夹组,加入include文件,而后按照对应的源工程代码修改测试。 首先我们选择\examples\AT32F4xx\AT32F403A_407_Firmware_Library_V2.1.4\project\ at_start_f407\examples\gpio\io_toggle这个工程; 将原来测试好的STM的串口黑白LCD文件夹的lcd复制过来,见截图2_01文件夹截图。 2.2 打开工程 编译下载LED是不会亮的,打开: at32f403a_407.h和at32f403a_407.c 将.h里面的代码改成: #define LED2_PIN GPIO_PINS_11 #define LED2_GPIO GPIOC #define LED2_GPIO_CRM_CLK CRM_GPIOD_PERIPH_CLOCK #define LED3_PIN GPIO_PINS_12 #define LED3_GPIO GPIOC #define LED3_GPIO_CRM_CLK CRM_GPIOD_PERIPH_CLOCK #define LED4_PIN GPIO_PINS_10 #define LED4_GPIO GPIOC #define LED4_GPIO_CRM_CLK CRM_GPIOD_PERIPH_CLOCK 偷懒了,我的板子只有3个可控LED,其中一个接在WSD的CLK上,做下载代码观测用,实际只有PC_11,PC_12两个LED,PC_10做备份吧。 因为接设计板子是将PC0-PC4定义为4线串口LCD,所以在这款128x64黑白LCD的初始化代码增加了GPIO口的定义: gpio_init_type gpio_init_struct; //enable the gpioa clock crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE); //set default parameter gpio_default_para_init(&gpio_init_struct); //configure the gpio gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; gpio_init_struct.gpio_pins = GPIO_PINS_0|GPIO_PINS_1|GPIO_PINS_2|GPIO_PINS_3|GPIO_PINS_11|GPIO_PINS_12|GPIO_PINS_10; gpio_init_struct.gpio_pull = GPIO_PULL_NONE; gpio_init(GPIOC, &gpio_init_struct);
因为这个128x64 的小屏幕的初始化代码可以驱显好几种同类LCD,所以他已经成为这类小屏的通用驱动了。 我设计的PCB将PA_0定义为用户按键 与原工程吻合可以直接套用,结果见视频。
|