STM32
文章平均质量分 78
91暖阳
电子爱好者
展开
-
GPIO的8种工作模式详细介绍!
我们在用STM32这颗MCU的时候,用的最多的也是最基础的应该就是GPIO外设了,而在STM32的HAL库中GPIO有8种工作模式4种输入状态,4种输出状态(2种复用输出2种普通输出),分别对应如下:如图1所示,浮空输入模式#define GPIO_MODE_INPUT 0x00000000U / *!<输入浮动模式* /当GPIO采用浮空输入模式时,STM32的引脚状态是不确定的,此时STM32得到的电平状态完全取决于GPIO外部的电平状态,所以说在GPIO外部的引脚悬空时,读取转载 2021-05-30 11:50:21 · 3540 阅读 · 0 评论 -
汇编中调用C中的函数,函数名前加下划线“_”
之前见过这种用法,但是不太清楚为什么,就以为是约定俗成,其实也算是约定俗成,这样做的目的是为了防止符号名冲突,因为在一个程序中往往是包含汇编和C文件的,汇编用于启动部分,C文件用于应用程序,最终通过编译器实现编译,对于编译器来说,汇编和C是一视同仁的,那么就会有个问题,如果在汇编和C文件中使用了同一个名字,这是很可能出现的,毕竟汇编相当于机器码也算是稍微高级的语言,在定义子程序或函数时,也是可以用英文拼写的,而C文件中,更会习惯用英文拼写。 所以为了防止类似的符号名冲突,UNIX下的C语言就规定,...原创 2020-09-13 17:35:16 · 962 阅读 · 0 评论 -
startup_stm32f10x_hd.s启动文件分析
;* 文件名 : startup_stm32f10x_hd.s;* 库版本 : V3.5.0;* 说明: 此文件为STM32F10x高密度设备的MDK工具链的启动文件;* 该模块执行以下操作:;* -设置初始堆栈指针(SP);* -设置初始程序计数器(PC)为复位向量,并在执行main函数前初始化系统时钟;* -设置向量表入口为异常事件的入口地址;* -复位之后处理器为线程模式,优先级为特权级,堆栈设置为MSP主堆栈;*Sta...转载 2020-09-13 17:30:49 · 429 阅读 · 0 评论 -
4. 算术运算指令,ADD/ADC,SUB/SBC ,MUL
4. 算术运算指令,ADD/ADC,SUB/SBC ,MULn ADD加法指令ADD R0,R1,R2; R0=R1+R2ADD R0,R1,#3 ;R0=R1+3n ADC带进位加法指令,即除了加两个数以外,还要把CPSR的C值也要带进来u 通常用于大数(超过32Bit整数)相加,这时单用ADD不能处理原创 2015-11-11 14:25:49 · 3803 阅读 · 0 评论 -
stm32概述
这篇是在网上看见的,讲的比较好http://www.52solution.com/bbs/redirect.php?tid=1395&goto=lastpost如果需要转载的请注明出处! 首先,在学习Cortex-M3时,我们必须要知道必要的缩略语。整理如下:AMBA:先进单片机总线架构 ADK:AMBA设计套件AHB:先进高性能总线 AHB-AP:AHB转载 2015-11-21 16:19:29 · 1432 阅读 · 0 评论 -
LDR指令和LDR伪指令的区别
ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。初学者一般不会注意到它们的区别,其实在嵌入式开发过程中,这两条指令时非常常用的!我们应该了解他们的区别。LDR伪指令的形式是“LDR Rn,=expr”。作用是装在一个32bit常数和一个地址到寄存器。下面举一个例子来说明它的用法。COUNT EQU 0x56000054LDR R1原创 2015-11-28 22:24:08 · 1197 阅读 · 0 评论 -
图解DIY 1pA超微电流测试器
目录00、前言01、电路图及说明02、仿真03、准备材料、元件04、元件布局05、制作输入隔离岛06、输入岛岛芯的制作07、元件安装和焊接08、反馈电容制作09、安装完成10、初步测试11、初步采集12、运放的说明13、超高阻的说明14、数据采集的说明15、用微电流源进行测试16、如何衡量一个微电流测试器的好坏17、商品微电流测试仪都是怎么做的?18、热电动势和噪音19、测试温度系数20、宇宙射线...转载 2017-04-21 14:13:57 · 9074 阅读 · 10 评论 -
STM32 GPIO外部中断总结
一、STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。S...转载 2017-10-31 10:03:39 · 7466 阅读 · 4 评论 -
6. 比较指令 CMP
6. 比较指令 CMPn CMP比较两个操作数,并把结果存入CPSR供下一句语句使用CMP R0,R1; 比较R0,R1原创 2015-11-11 14:28:40 · 1346 阅读 · 0 评论 -
static的作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable原创 2015-11-11 14:52:35 · 1924 阅读 · 0 评论 -
解析STM32启动流程
转载地址:http://www.amobbs.com/thread-5462931-1-1.html相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC =转载 2015-08-03 18:38:25 · 502 阅读 · 0 评论 -
关于STM32栈增长和大端/小端问题是和CPU相关的两个问题
1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示栈大小是0X800,也就是2048字节.这样,CPU处理原创 2015-08-03 16:27:21 · 443 阅读 · 0 评论 -
B与BL的区别
B常用于不返回的跳转,比如跳到某个标号处,BL则用于子程序跳转(要返回,返回地地存于LR)B. (注意B后面的“.”)这个“.”是指定当前的地址,如果使用 B.这条指令,其实就是死循环。原创 2015-11-11 14:16:01 · 4733 阅读 · 0 评论 -
传输数据指令MOV,MVN
2. 传输数据指令MOV,MVNn MOV(MOVE)指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器MOV R0,R1 ; 把R1的值传到R0MOV R3,#3 ;把常数3传给R3,MOV中用#表示常数,这个值不能超过n MVN( MOVE Negative)取反后再传值,比MOV多了一步取反MVN R0, #0 ;把0取反(即-1)原创 2015-11-11 14:20:04 · 2058 阅读 · 0 评论 -
3. 加载/存储指令,LDR,STR
3. 加载/存储指令,LDR,STRn LDR,STR是用于寄存器和外部存储器交换数据指令,注意与MOV的区别,后面只在寄存器或常数交换.u LDR/STR可以采用多种寻址方式,以下只举出使用频率最高几种用法n LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中LDR R0,[R1]; R1的值当成地址,再原创 2015-11-11 14:23:40 · 809 阅读 · 0 评论 -
5. 位操作指令 AND,ORR, TST,BIC
5. 位操作指令 AND,ORR, TST,BICn AND位与指令AND R0,R1,R2; R0=R1 & R2AND R0,R1,#0xFF ;R0=R1 & 0xFFn ORR位或指令ORR R0,R1,R2; R0=R1 | R2ORR R0,R1,#0xFF ;R0=R1 | 0xFFn TST原创 2015-11-11 14:27:46 · 2755 阅读 · 0 评论 -
arm汇编指令
7. 多寄存器语句传输指令,LDM,STM类似于一次传一个BUFFER到寄存器当中,或反过来.后面一般要接一个地址改变方法n LDM 从BUFFER传数据多个寄存器传输数据到LDMIA R0! ,{R3-R9} ;加R0指向的地址上连续空间的数据,保存到R3-R9当中,!表示R0值更新,IA后缀表示按WORD递增LDMFD SP!,{R0-R7,PC原创 2015-11-11 14:34:40 · 1065 阅读 · 0 评论