#申请原创# 前段时间感染新冠了,现在仍咳嗽不止,今天周末来分享一下最近使用AT-START-F407开发板的体验。关于AT-START-F407开发板,我们从官方的资料可知板载AT32F407VGT7微控制器是一个带有FPU内核的ARM Cortex® -M4F,32位处理器,内建1024 K字节的闪存存储器,96+128K字节的SRAM,LQFP100封装。板载AT-Link接口,可用板载AT-Link-EZ来编程和调试。板卡集成16M字节SPI闪存EN25QH128A作为扩充的闪存存储器区块3(Bank 3)使用。开发板的硬件框图如下:
通过SPIM接口使用闪存存储器区块3时,JP8连体跳线须选择左侧SPIM端,此时PB1,PA8,PB10,PB11,PB6,和PB7没有连接到外部的I/O口扩展接口,也不能正常使用以太网MAC功能了,这点感觉有点差异,做网关项目能离开大容量存储?我司采用的NXP-K64开发的Zigbee网关方案,是采用外部存储设备、用户信息,并不影响以太网功能,采用的8M外部存储芯片原理图如下:
AT-START-F407开发板上与外部存储芯片U4连接的原理图如下:
AT-START-F407开发板的正面点位图如下:
从点位图可知,启动模式选择跳线处印有BOOT0、BOOT1的标识。在启动时,通过对启动引脚配置可以选择三种启动模式中的一种。
官方提供的SDK中有提供基于IAR,Keil的例程,本人习惯于Keil开发平台,在此之前,我们需要先将基于AT-START-F407的pack包安装到Keil中,雅特力官方已经提供,这里分享一下。
ArteryTek.AT32F403A_407_DFP.2.1.3.zip
(348.27 KB)
安装好pack支持包后,我们将下载好的“AT32F403A_407_Firmware_Library_V2.1.3.zip”解压出来,进入到“\project\at_start_f407\examples\flash”路径下,这四个工程都是关于flash操作的,没有工程中都写有“readme.txt”文档,文件结构很是规范,这里我们关注一下“operate_spim”工程。在这个工程中实现了对外部存储EN25QH128A的擦除,读写一个扇区的检测,成功则串口打印读写地址,三颗指示灯流水闪烁。部分代码展示:
#include "at32f403a_407_board.h"
#include "at32f403a_407_clock.h"
#include "operate_spim.h"
int main(void)
{
system_clock_config();
uart_print_init(115200);
at32_board_init();
spim_operate();
while(1)
{
}
}
#include "at32f403a_407_board.h"
#include "operate_spim.h"
#include <string.h>
uint8_t write_buffer[4096]; /* the content writed to spim flash */
uint8_t read_buffer[4096]; /* the content read from spim flash */
void spim_init(void)
{
gpio_init_type gpio_init_struct;
crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
gpio_default_para_init(&gpio_init_struct);
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_MUX;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_pins = GPIO_PINS_8;
gpio_init(GPIOA, &gpio_init_struct);
gpio_init_struct.gpio_pins = GPIO_PINS_1 | GPIO_PINS_6 | GPIO_PINS_7 | GPIO_PINS_10 | GPIO_PINS_11;
gpio_init(GPIOB, &gpio_init_struct);
gpio_pin_remap_config(EXT_SPIM_GMUX_1001, TRUE);
flash_spim_model_select(FLASH_SPIM_MODEL2);
while(flash_flag_get(FLASH_SPIM_OBF_FLAG));
flash_spim_unlock();
while(FLASH->ctrl3_bit.oplk);
flash_spim_encryption_range_set(0);
return;
}
void sector_read(uint32_t address, uint32_t sector_size, uint8_t *buf)
{
while(sector_size)
{
*(uint32_t *)buf = *(uint32_t *)address;
sector_size -= sizeof(uint32_t);
address += sizeof(uint32_t);
buf += sizeof(uint32_t);
}
}
void spim_operate(void)
{
uint16_t i = 0;
flash_status_type status = FLASH_OPERATE_DONE;
spim_init();
for(i = 0; i < SPIM_SECTOR_SIZE; i++)
{
write_buffer[i] = i % 256;
}
status = flash_operation_wait_for(ERASE_TIMEOUT);
if((status == FLASH_PROGRAM_ERROR) || (status == FLASH_EPP_ERROR))
flash_flag_clear(FLASH_PRGMERR_FLAG | FLASH_EPPERR_FLAG);
else if(status == FLASH_OPERATE_TIMEOUT)
{
编译完成后,将Micro USB数据线连接开发板的CN6接口,数据线的USB口连接PC端,此时打开PC中的串口助手,选择识别到的串口号,波特率设置成代码中指定的115200,Keil中选择CMSIS-DAP Debugger方式。
下载完后,按一下RESET键,重启开发板,开发板与PC端的串口助手中呈现的效果如下图所示:
此次SPIM外部存储操作体验就此告一段落,使用AT-START-F407开发板感觉下载调试很方便,虽然提供了JTAG接口,但有了AT-Link-EZ完全够用平时的下载调试需求了,能使用AT32F403CGT6作为AT-Link-EZ的MCU,值的点赞。
|