本帖最后由 南来之风 于 2023-1-30 12:25 编辑
非常感谢雅特力和21ic提供的此次体验F437的机会,这是一款性能强劲的单片机。开箱照如下:
AT32F437系列超高效能微控制器,搭载32位ARM® Cortex®-M4内核,配合先进工艺与整合技术缔造业界Cortex®-M4最高主频效能288MHz的运算速度。内建的单精度浮点运算单元(FPU)、数字信号处理器(DSP)及存储器保护单元(MPU),搭配丰富的外设及灵活的时钟控制机制,能满足多种领域应用。最高可支持超大容量4032KB的闪存(Flash)和高达512KB的SRAM。
此外,这款芯片的开发生态极其完善,参考官网提供的资料可以快速上手这款板子 https://www.arterytek.com/cn/product/AT32F437.jsp#Resource。板子的主要资源如下:
本文测评的目标是:快速搭建F437开发环境,驱动OLED屏幕。
首先,屏幕选用的是手头现成的0.96 inch的oled模块,其中管脚的定义如下:GND: 接地
VCC: 电源
SCL: SPI时钟线
SDA: SPI 主出从入线(数据从F437发送到OLED)
RES: 复位线
DC: 数据/命令选择线
CS: 片选(硬件上已经置低,因此无需额外的GPIO控制)
OLED与F437硬线连接:考虑到接线方便,项目中使用了PD1,PD3,PD5,PD7和PD9连接到OLED。本文选择的连线方式如下:
相应的初始化代码如下:void oled_gpio_config(void)
{
gpio_init_type gpio_init_struct;
/* enable the gpioD clock */
crm_periph_clock_enable(CRM_GPIOD_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_1 | GPIO_PINS_3 | GPIO_PINS_5 | GPIO_PINS_7 | GPIO_PINS_9;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOD, &gpio_init_struct);
}
之后,需要调用库函数来修改相应的拉高,拉低操作。
//-----------------OLED Pin Config----------------
/**
* SCL: PD1
* SDA: PD3
* RES: PD5
* DC: PD7
* CS: PD9
*/
#define OLED_SCL_Clr() GPIOD->clr = GPIO_PINS_1 //0
#define OLED_SCL_Set() GPIOD->scr = GPIO_PINS_1 //1
#define OLED_SDA_Clr() GPIOD->clr = GPIO_PINS_3 //0
#define OLED_SDA_Set() GPIOD->scr = GPIO_PINS_3 //1
#define OLED_RES_Clr() GPIOD->clr = GPIO_PINS_5 //0
#define OLED_RES_Set() GPIOD->scr = GPIO_PINS_5 //1
#define OLED_DC_Clr() GPIOD->clr = GPIO_PINS_7 //0 pin25
#define OLED_DC_Set() GPIOD->scr = GPIO_PINS_7 //1 pin25
#define OLED_CS_Clr() GPIOD->clr = GPIO_PINS_9 //0
#define OLED_CS_Set() GPIOD->scr = GPIO_PINS_9 //1
主函数代码:int main(void)
{
system_clock_config();
at32_board_init();
oled_gpio_config();
OLED_Init();
OLED_ShowString(8,16,"Hello F437!",16,1);
OLED_Refresh();
delay_ms(1000);
while(1)
{
at32_led_toggle(LED2);
delay_ms(1000);
at32_led_toggle(LED3);
delay_ms(1000);
at32_led_toggle(LED4);
delay_ms(1000);
}
}
实物效果:
总体来说,虽然是第一次使用雅特力单片机,但是应用文档的丰富,以及代码库的完善,都完全超过了我的预期!希望雅特力能够在国内外市场取得越来越大的成功,帮助客户节约成本,满足项目需求!
附件源码基于Keil5:
|