AT32F435 入门使用

news2024/12/26 21:37:37

AT32F435 入门使用


  • 🔖这里以AT32F435RGT7作为测试对象,创建基于Keil平台编译的代码工程。
  • 📍相关篇《基于AT32_Work_Bench配置AT32工程》
  • ✨由于AT32F435RGT7(LQFP-64封装)引脚与STM32F405RGT6TR引脚兼容程度:96.875%.不兼容的两个引脚为:PH2PH3.具体对照下图:
    在这里插入图片描述

📘AT32F435 程序烧录的常用几种方式

    1. 通过SWD接口烧录,支持的烧录器有:DAP-LINK、J-LINK、以及AT32官方的AT-LINK。
    1. 通过USB DFU模式烧录,也就是USB接口(PA11、PA12引脚)。
    1. 通过串口烧录。(常见使用串口1:PA9、PA10引脚)
  • 👉以及其他烧录方式:I2C,SPI、CAN,这里不做介绍,可以参考Bootloader ISP协议文档:https://www.arterytek.com/cn/support/index.jsp?index=5
    在这里插入图片描述
  • ✨编程+烧录推荐使用DAP-LINK工具。AT-LINK需要购买, 自制也需要手上,必须要有一个AT-LINK才行,虽然官方开放了AT_Link资料,但是固件给的是加密的.atcp文件,只有通过AT-LINK才能烧录,这一点很坑,自制还需要买一个才能烧录固件,那自制就没有必要了,毕竟这个东西多了,又不能当饭吃的。
  • 🔬如果自制,补充一句有关固件加载和烧录:AT-LINK加载加密固件步骤和方式:使用Artery_ICP_Programmer工具
    在这里插入图片描述
  • 🌿Bootloader引脚描述参考《AT32F435/437系列 数据手册》:https://www.arterytek.com/download/DS/DS_AT32F435_437_V2.12_CH.pdf
    在这里插入图片描述
  • 🎉个人使用串口1-3都进行了测试,通过Artery ISP Programmer工具,都可以进行连接。芯片版本是B1
    在这里插入图片描述
USART1
PA9:USART1_TX 
PA10:USART1_RX
------
USART2
PA2:USART2_TX 
PA3:USART2_RX 

----
USART3 
PC10:USART3_TX 
PC11:USART3_RX 
或 
PB10:USART3_TX(1) 
PB11:USART3_RX(1) 
  • 🍭使用Artery ISP Programmer工具,通过串口连接时,最好将BOOT1(PB2引脚)=0拉低,BOOT0引脚拉高,然后按复位进行连接。✨如果BOOT1(PB2引脚)处于浮空或拉高的状态下,仅拉高BOOT0引脚,一次性连接成功率不高。✨
📄BOOT1(PB2)和BOOT0引脚电平
  • 🌿当{BOOT1,BOOT0}=00/10 时,CODE 从主闪存存储器启动。
  • 🌿当{BOOT1,BOOT0}=01 时,CODE 从启动程序存储器启动。
  • 🌿当{BOOT1,BOOT0}=11 时,CODE 从片上 SRAM 启动。

📒程序烧录上位机使用

  • 🔧串口和USB DFU模式以及I2C、SPI、CAN使用使用;ArteryISPProgrammer工具进行烧录。:https://www.arterytek.com/cn/product/AT32F435.jsp

  • 🌿DFU模式:进入:
    在这里插入图片描述
    在这里插入图片描述

  • 🔨SWD接口烧录,使用ArteryICPProgrammer工具进行烧录。支持OB-JLINK、AT-LINK烧录器。

在这里插入图片描述

  • 🛠keil开发环境下,支持J-LINK、CMSIS-LINK烧录。
  • 🌿J-LINK连接:
    在这里插入图片描述
  • 🌟对J-LINK的支持,需要提前导入AT32芯片数据数据到Keil安装的Segger目录。导入软件:Segger_AT32MCU_AddOn_Win32-x86_64https://www.arterytek.com/cn/support/index.jsp?index=5
    在这里插入图片描述
  • 🧨导入位置:

在这里插入图片描述

在这里插入图片描述

  • 🌿DAP-LINK不需要做任何配置,即可直接烧录。
    在这里插入图片描述

⛳注意事项

  • 🌿如果使用DAP-LINK下载报错:Error: Flash Download failed - "Cortex-M4"解决方法:对全片flash做擦除。
    在这里插入图片描述

🌼点灯环节

  • 🔖工程创建可以使用AT32_Work_Bench,具体可以参考前面的相关篇内容。
  • 🌿基于AT32_Work_Bench配置的初始化工程,目前这个工具生成的代码宽度很有限,很多外设的功能函数没有。例如USB外设,就没有相对应的扩展驱动包。
📑GPIO位带操作实现方法
📄位带介绍

利用位带操作,可以使用普通的加载/存储操作来对单一比特进行读写访问。在 Cortex®-M4F 中提供了两个位带区:SRAM 最低 1M 字节空间和外设区间的最低 1M 字节空间。这两个区中的地址除了可以像普通存储器一样访问外,还可以通过它们各自的位带别名区来快捷访问这两个区中任意地址的任意比特位,位带别名区将位带区每个比特膨胀成一个 32 位的字。当你访问位带别名区的一个地址时,等同于直接访问位带区的一个比特位。

位带区:支持位带操作的地址区,分别是SRAM区的最低1MB范围和外设区的最低1MB范围。
位带别名:对别名地址的访问最终作用到位带区的访问上(注意:这其中有一个地址映射的过程)

  • 🌿SRAM存储器

AT32F435/437 系列内置默认 384K 字节的片上 SRAM,起始地址为 0x2000_0000。它可以以字节、半字(16 位)或全字(32 位)访问。AT32F435/437 系列另外提供一个特别的模式能使片上 SRAM 在最低128K 字节到最高 512K 字节之间动态配置,使用者可透过设定扩充的系统选项 EOPB0 来使用此扩充模式。在 512K 字节扩充模式下,零等待延迟(zero wait state)的闪存容量限制为 128K 字节。在 128K 字节扩充模式下,零等待延时的闪存容量限制为 512K 字节。片上 SRAM 分为两块:SRAM1 和 SRAM2。SRAM1 大小固定为 64K 字节,可在 0x2000_0000 ~ 0x2000_FFFF 或0x1000_0000 ~ 0x1000_FFFF 两个地址空间对 SRAM1 进行访问。SRAM2 的大小为 64K~448K 字节,可在 0x2001_0000 ~ 2007_FFFF 地址空间对 SRAM2 进行访问。

  • 🌿GPIO外设地址映射
    在这里插入图片描述

  • 🌿GPIO输入和输出偏移地址
    在这里插入图片描述

  • 🌿AT32F435的位带操作定义:

#include "at32f435_437.h"
	

#define ODR_OFFSET	0X14	//gpio output data register
#define	IDR_OFFSET	0x10   //gpio input data register
	 
//位带操作,实现51类似的GPIO控制功能
//IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 
//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+ODR_OFFSET) //0x40020014 
#define GPIOB_ODR_Addr    (GPIOB_BASE+ODR_OFFSET) //0x40020428 
#define GPIOC_ODR_Addr    (GPIOC_BASE+ODR_OFFSET) //0x4002083C 
#define GPIOD_ODR_Addr    (GPIOD_BASE+ODR_OFFSET) //0x40020C50 
#define GPIOE_ODR_Addr    (GPIOE_BASE+ODR_OFFSET) //0x40021064 
#define GPIOF_ODR_Addr    (GPIOF_BASE+ODR_OFFSET) //0x40021478    
#define GPIOG_ODR_Addr    (GPIOG_BASE+ODR_OFFSET) //0x4002188C    
#define GPIOH_ODR_Addr    (GPIOH_BASE+ODR_OFFSET) //0x400218A0 

#define GPIOA_IDR_Addr    (GPIOA_BASE+IDR_OFFSET) //0x40020010 
#define GPIOB_IDR_Addr    (GPIOB_BASE+IDR_OFFSET) //0x40020420 
#define GPIOC_IDR_Addr    (GPIOC_BASE+IDR_OFFSET) //0x40020830 
#define GPIOD_IDR_Addr    (GPIOD_BASE+IDR_OFFSET) //0x40020C40 
#define GPIOE_IDR_Addr    (GPIOE_BASE+IDR_OFFSET) //0x40021050 
#define GPIOF_IDR_Addr    (GPIOF_BASE+IDR_OFFSET) //0x40021460 
#define GPIOG_IDR_Addr    (GPIOG_BASE+IDR_OFFSET) //0x40021870 
#define GPIOH_IDR_Addr    (GPIOH_BASE+IDR_OFFSET) //0x40021880  
//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出 
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出 
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 

#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出 
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入 

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出 
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入 

#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出 
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入

#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出 
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入

#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出 
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入

#define PHout(n)   BIT_ADDR(GPIOH_ODR_Addr,n)  //输出 
#define PHin(n)    BIT_ADDR(GPIOH_IDR_Addr,n)  //输入


  • 🌿GPIO引脚按位取反操作
		PHout(2) = !PHout(2) ;
       PHout(3) = !PHout(3);
  • 🌿GPIO引脚置位和复位操作:
       PHout(2) = 1;
       PHout(3) = 0 ;
  • 🌿GPIO输入引脚位带操作读取:
if(PDin(2)==1){
while(PDin(2)==1);		
}
📗串口printf重映射实现
#define PRINT_UART            USART1

//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
/* support printf function, usemicrolib is unnecessary */
#if (__ARMCC_VERSION > 6000000)
__asm(".global __use_no_semihosting\n\t");
void _sys_exit(int x)
{
    x = x;
}
/* __use_no_semihosting was requested, but _ttywrch was */
void _ttywrch(int ch)
{
    ch = ch;
}
FILE __stdout;
#else
#ifdef __CC_ARM
#pragma import(__use_no_semihosting)
struct __FILE {
    int handle;
};
FILE __stdout;
void _sys_exit(int x)
{
    x = x;
}
/* __use_no_semihosting was requested, but _ttywrch was */
void _ttywrch(int ch)
{
    ch = ch;
}
#endif
#endif

#if defined (__GNUC__) && !defined (__clang__)
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

/**
  * @brief  retargets the c library printf function to the usart.
  * @param  none
  * @retval none
  */
PUTCHAR_PROTOTYPE {
    while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET);
    usart_data_transmit(PRINT_UART, (uint16_t)ch);
    while(usart_flag_get(PRINT_UART, USART_TDC_FLAG) == RESET);
    return ch;
}

#if (defined (__GNUC__) && !defined (__clang__)) || (defined (__ICCARM__))
#if defined (__GNUC__) && !defined (__clang__)
int _write(int fd, char *pbuffer, int size)
#elif defined ( __ICCARM__ )
#pragma module_name = "?__write"
int __write(int fd, char *pbuffer, int size)
#endif
{
    for(int i = 0; i < size; i ++) {
        while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET);
        usart_data_transmit(PRINT_UART, (uint16_t)(*pbuffer++));
        while(usart_flag_get(PRINT_UART, USART_TDC_FLAG) == RESET);
    }

    return size;
}
#endif
📚测试工程
链接:https://pan.baidu.com/s/1Q0b1t9ydOWakzxr2p0jTCw?pwd=471q 
提取码:471q

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI周报(6.16-6.22)

1 不是AI而是逐帧视觉特效-2024年D&AD黑铅笔奖Women’s Football Women’s Football在2024年D&AD广告类Digital & Social类别中获得了黑铅笔奖&#xff0c;并在Film类别中获得了黄铅笔奖 原来那些超燃的画面&#xff0c;是把女足比赛的画面“换脸”成了男运动员。…

css 动画

transform的3D动画 3D形变函数会创建一个合成层来启用GPU硬件加速 translate transform: translateY(100px);transform: translateX(100px);transform: translateZ(100px);transform: translate3d(100px,100px,100px); // x,y,z的简写rotate deg弧度 transform: rotateX(-40…

API接口技术开发分享;按关键字搜索淘宝、天猫商品API返回值接入说明

淘宝数据API的接入流程主要包括注册key账号、创建开发者应用、获取ApiKey和ApiSecret、申请API权限等步骤。淘通过这些接口可以获取商品、订单、用户、营销和物流管理等多方面的数据。以下是关于淘宝数据API接入流程的相关介绍&#xff1a; 注册key账号&#xff1a;进行账号注册…

opencv-python(十一)

图像加法 import numpy as np import cv2 img cv2.imread(jk.jpg) res cv2.add(img, img) cv2.imshow(Mypicture1,img) cv2.imshow(MyPicture2,res)cv2.waitKey(0) cv2.destroyAllWindows() res cv2.add(src1, src2, dstNone, maskNone, dtypeNone) src1&#xff1a;第一幅…

colima配置docker镜像源

只在 colima ssh 环境下修改 docker 配置文件是无效的&#xff0c;我们需要修改 colima 配置文件才能使 docker 镜像源生效。 此时你需要进入到~/.colima/default目录下编辑colima.yaml文件。该文件是 colima 的配置文件。内容如下图所示&#xff0c;我这里配置了许多家的镜像源…

我的python-web基础(Flask前后端不分类)

1.HTML HTML是超文本标记语言 &#xff08; 英文 &#xff1a; HyperText Markup Language &#xff0c; HTML &#xff09;&#xff0c;它不是编程语言&#xff0c;而是一种标记语言 HTML标记标签通常被称为HTML标签&#xff0c;它的特点如下&#xff1a; HTML标签是由尖括…

数据集标注研究

主要研究数据集标注存储文件的数据存储格式 目录 0.简介1.coco128-seg数据格式1.1 分割标注格式2.YOLO格式2.1 YOLO目标识别标签2.2 yolov5-seg分割标签2.TT100K数据集标注2.1 TT100K数据集标注文件解析0.简介 1.coco128-seg数据格式 1.1 分割标注格式 如coco128-seg数据集 …

力扣85.最大矩形

力扣85.最大矩形 遍历所有行作为底边 做求矩形面积&#xff08;84. class Solution {public:int maximalRectangle(vector<vector<char>>& matrix) {if (matrix.empty()) return 0;int n matrix.size(),m matrix[0].size();int res0;vector<int> li…

链动3+1商业模式:革新之路,引领企业持续增长

随着信息技术的飞速发展和互联网的不断渗透&#xff0c;企业的商业模式变革已经成为市场竞争中不可或缺的一环。在这个变革的浪潮中&#xff0c;链动31商业模式以其独特的逻辑和高效的激励机制&#xff0c;成为了业界瞩目的焦点。本文将深入探讨链动31模式的运作机制&#xff0…

【Matlab】-- BP反向传播算法

文章目录 文章目录 00 写在前面01 BP算法介绍02 基于Matlab的BP算法03 代码解释 00 写在前面 BP算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化算法一起&#xff0c;进行回归预测或者分类预测。 01 BP算法介绍 BP&#xff08;Backpropag…

怎样去掉卷子上的答案并打印

当面对试卷答案的问题时&#xff0c;一个高效而简单的方法是利用图片编辑软件中的“消除笔”功能。这种方法要求我们首先将试卷拍摄成照片&#xff0c;然后利用该功能轻松擦除答案。尽管这一方法可能需要些许时间和耐心&#xff0c;但它确实为我们提供了一个可行的解决途径。 然…

SystemVerilog Assertion精华知识

前言 断言主要用于验证设计的行为。断言也可用于提供功能覆盖率&#xff0c;并标记用于验证的输入激励不符合假定的需求。 在验证平台中&#xff0c;通常进行三个主要任务&#xff1a; 产生激励功能检查功能覆盖率度量 在当今的设计越来越复杂情况下&#xff0c;像波形调试…

大数据学习-Hive

介绍 分布式 SQL 计算 做数据的统计分析&#xff0c;SQL 是最方便的工具 在大数据中&#xff0c;有很多的统计分析场景&#xff0c;那么 SQL 来处理大数据是非常合适且频繁的 以后可能就是 SQL Boy 了&#xff0c;所以学习前需要有 MySQL 的基础 Hive 的功能 是一个分布式…

Microsoft Edge无法启动搜索问题的解决

今天本来想清一下电脑&#xff0c;看到visual studio2022没怎么用了就打算卸载掉。然后看到网上有篇文章说进入C盘的ProgramFiles&#xff08;x86&#xff09;目录下的microsoft目录下的microsoft visual studio目录下的install目录中&#xff0c;双击InstallCleanup.exe&#…

什么概率密度函数?

首先我们来理解一下什么是连续的随机变量&#xff0c;在此之前&#xff0c;我们要先理解什么是随机变量。所谓随机变量就是在一次随机实验中一组可能的值。比如说抛硬币&#xff0c;我们设正面100&#xff0c;反面200&#xff0c;设随机变量为X&#xff0c;那么X{100,200}。 X是…

[RK-Linux] RK3562 I2C驱动TP芯片GSL3680

TP芯片GSL3680 1、简介 GSL3680是一款电容屏多点触摸控制单芯片,其芯片内部框架图如下所示: GSL3680采用了独特的互电容感应技术,可以在1ms内测量多达192个节点,支持广泛的传感器选择,包括单层或双层ITO,玻璃或薄膜,采用了先进的抗电磁干扰信号处理技术,使其对各种干…

笑死,裁员裁到大动脉了…

近日&#xff0c;某知名科技公司的裁员事件引起了社会的广泛讨论。 “笑死&#xff0c;裁员裁到大动脉了…” 看起来是大众对裁员事件的戏谑之词&#xff0c;实际上却暗示出了“打工人”的心酸同时也揭开了企业管理层的遮羞布。 &#x1f4a1;裁员决策在项目管理视角下的分析 …

AOP应用之系统操作日志

本文演示下如何使用AOP&#xff0c;去实现系统操作日志功能。 实现步骤 引入AOP包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.6.6</version></de…

【Apache Doris】周FAQ集锦:第 7 期

【Apache Doris】周FAQ集锦&#xff1a;第 7 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

YYU-5/80-260mm型钢筋残余变形测试仪 电子引伸计

YYU-5/80-260mm型钢筋接头专用引伸计&#xff0c;是按照《JGJ 107 2010 钢筋技术连接技术规程》的技术要求设计的&#xff0c;专门用于测试钢筋接头残余变形的双向平均引伸计&#xff0c;其标距可以根据钢筋直径要求进行调整。 完全符合《JGJ 107 2010 钢筋技术连接技术规程》…