![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
KEIL 5.38的ARM汇编
文章平均质量分 92
使用GNU和ARM汇编语言在KEIL 5.38下进行开发。
超级喵窝窝
^_^
展开
-
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记13 - STM32的SDIO学习5 - 卡的轮询读写擦
endif添加了3个函数接口,分别是这三个接口的实现如下所示。但是由于前面说了逻辑,具体的每行的解释这里就不说了。这样,用轮询的方式实现读写擦SD卡的驱动就实现了。读的速率可以根据卡的额定速度来,但是写入的速度不能高于6.8MBit/s。写入和擦除之后要轮询卡的状态,确认卡已经从PROG状态中转出。读写擦的轮询的标志位其实可以有多个选择。但是要测试确认。管子的数据是32位的,但是发送的是按照8位的。所以可以认为是一次发4个字节。读写缓冲区都必须是字对齐(4字节对齐)原创 2024-05-06 14:14:11 · 1006 阅读 · 0 评论 -
KEIL 5.38的C编译器ARM Compiler V5
下载老版本的编译器安装包。安装到KEIL的ARM文件夹下创建的子目录里。在KEIL中选中并加入到编译器序列中测试编译这样就完成了v5编译器的安装。原创 2023-04-14 11:11:56 · 4088 阅读 · 1 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记12 - STM32的SDIO学习4 - Read Card Status and SD Status 补充
这样写当时达到的效果是,开机以后,随时可以把卡插入,就可以进入后面的卡识别流程。笔者买的这批卡中,所有的1G的都是VER1.0的,2G的都是VER2.0。如果我插入的是SDHC或更高容量的卡,且是VER2.0,且正好是在发ACMD41广播的时候,由于这些卡强制要求先发CMD8,有的时候就很迷幻的,这些卡就转入了inactive状态了。本次试验改进了卡的识别函数,这样可以兼容v1.0和v2.0两种Physical Layer Spec.,也增加了对SDHC的兼容,可以识别SDSC、SDHC的卡容量和块大小。原创 2024-03-19 11:56:13 · 713 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记11 - STM32的SDIO学习3 - Read Card Status and SD Status
虽然前面已经把内存卡的块设置了,但是MCU的SDIO Adapter也要设置每次数据传输的块的字节数和每次要传输的字节。并且,要传输的字节数必须是设置的块的字节数的整数倍。由于有ARM流水线存在,且内核取指令的I-Bus的速度肯定是远快过SDIO的速度的,所以这个时序不会造成数据丢失的。卡发送的是假如是下面的数据。汇编结构体里面的各个域的大小如果可以遵守C语言的字地址、半字地址和字节地址大小安排,未来如果再在C下面也按照这个顺序定义一个结构体类型,那么在C下面是可以用结构体指针安全访问这个汇编结构体的。原创 2024-03-14 00:11:35 · 813 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 - Card Identification
经过测试,笔者发现,每次发完指令都把这个CPSM关一下,这个问题就没了。用STM32F407发送CMD0的时候,明明SDIO_STA中已经提示了CMDSENT,但是可以确认的是,卡并没有初始化。但是在汇编这里,所有的延时一般都是轮询某个标志位来的,都必须要有道理。其次,考虑到笔者操作的其实是memory card,不能算是combo card,所以将程序中的原来是combo card的名称改成memory card。第67页,发送ACMD41的时候你要么就一直在轮询发,要么就等一等。这里我采用的是轮询发。原创 2024-03-09 08:40:12 · 1104 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记9 - STM32的SDIO学习1
相比笔者目前接触过的接口,包括UART、SPI、I2C(硬件)、CAN、FSMC,我感觉这些总线中只有CAN好像可以真正意义上一行代码都不写,直接进DEBUG里对相应的寄存器一通捣鼓就可以成功看到数据帧或扩展帧的收发。其他的总线多多少少会因为有一些时效性的要求,就算是时序对了,不能满足时效的话就会发生异常。所以虽然CAN的文档也不少,但是学习曲线其实就还好。但是对于这种有时效性要求的接口,如果文档还比较多,文档结构还不太对你的阅读思路习惯,那就可能要辛苦一些了。原创 2024-02-28 01:40:02 · 1069 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记8 - STM32的CAN学习与测试3
但是我这里只是为了了解CAN总线的接收功能,就不去费事搞了。只要能在DEBUG里看到接收到的数据就可以了。测试用例的代码如下所示。由于KEIL的寄存器窗口不能看到ASCII码,所以笔者把RDL0R的地址用memory标签也打开了。综上所述,也包括前面写到的两篇文章,可以确定:CAN总线接口在下面的初始化流程之后,就可以方便的收发数据了。给两块板子下载完成以后,DEBUG进入一块板子的DEBUG界面,如下所示。虽然两个板子都在发送,但是还是可以接收到其他的板子发送的数据。这样就可以时间数据的发送了。原创 2024-02-23 16:52:30 · 328 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记7 - STM32的CAN学习与测试2
关于上一期说到的那个这个示波器的协议解析选件的BUG,在没有ACK应答的时候确实会出现不好确认ACK ERROR的问题。但是在ACK应答正常的情况下,SDS3104X HD是不出这个BUG的。有人可能会认为,我应该把尽可能多的常数定义成符号(注意,C语言里面的宏和汇编中的符号不是一回事。那就是在debug之前要记得检查一下板子上的BOOT0和BOOT1口的电平是否是正确的。参考手册的第69页的表2。根据CAN的协议,ACK那个位必须是总线系统中其他的设备来填。的讨论,我实现了单机的回环模式的CAN测试。原创 2024-02-18 22:16:37 · 1103 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记6 - STM32的CAN学习与测试1
CAN总线是STM32的一个很重要的接口。在很多与伺服控制器、工控上位机等设备通讯的时候,CAN都是必须要支持的接口。然而奇怪的是,很多的嵌入式工程师似乎并不会使用。所以研究了相应的说明文件以后,我利用代码和调试来学习并测试了CAN接口。这里对学习和测试的过程进行说明。有关CAN的协议这里就不赘述了。网上有很多讲的。我这里使用的开发与测试相关的软硬件如下表所示。设备与配件型号与参数IDE开发板HX32F4系统Windows 10示波器。原创 2024-02-11 20:49:23 · 767 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记5——PWM输出控制蜂鸣器
考虑基于前面设计的程序实现一个蜂鸣器的驱动。蜂鸣器部分的电路是:蜂鸣器看起来可以被叫做beep或buzzer。这里我在程序上使用的名称是buzzer。这个Buzzer连在了PB4上面的。环境描述MCUIDEKeil mdkRTOSKeil RTX5串口继承前面的设计没有改变。蜂鸣器Buzzer;;Author : 超级喵窝窝;;原创 2023-04-13 16:40:41 · 1430 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4——Directives
在前面的工程中,我感觉下面的这些Directives是非常有用的。名称功能包含其他文件类似与条件编译WHILE…ENDW重复生成代码、汇编器变量计算DEF类似于C中的#ifdef定义汇编器变量汇编器变量赋值EQU符号赋值RLIST寄存器列表定义RN寄存器别名MACRO…MEND宏定义ROL、ROR、MOD等运算符实现汇编器运算输出/引入符号这里所有的Directives都在可以查到。这些Directives是在汇编器的第一遍pass的时候被执行的。原创 2023-03-31 16:11:29 · 312 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记3——串口Stdio实现
这个测试主要是在ARM核里运行。所以如果使用正点的板子或者其他的407的板子,都可以做出来。做了好几天出来。也是为了自己联系编程,也是为了留个笔记,以后用的时候可以找到。那么创建usb_uart.s。首先定义本文内要用的宏定义。这里通过配置的Manual Configuration里面的宏,就可以完成设置。时钟启动,启动gpio和要用的USART。Pin脚设置,设置TX和RX的pin脚,主要是MODER和AFIO。有关AFIO的值要去查Datasheet。中断设置,主要设置优先级。原创 2023-03-30 15:38:23 · 534 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记2——设置PLL
可以看到,在调用pll_config()前,系统时钟的频率是16MHz(0xF42400),也就是内部RC的时钟。调用pll_config()之后,系统时钟的频率是150MHz(0x8F0D180)。这样,就成功的将系统时钟设置为pll的150MHz。创建pll_config.s和pll_config.h。这里要注意一点,就是在设置完时钟以后,切换时钟之前必须要对FLASH进行设置。但是要注意修改CPU时钟的时候要参考手册,修改flash的设置。pll_config.s代码如下所示。测试主函数如下所示。原创 2023-03-17 14:40:08 · 511 阅读 · 0 评论 -
KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记1——基本的ARM汇编语法
我之前一直在用KEIL以外的很多IDE进行程序开发,比如STM32CUBEIDE、SEGGER EMBEDDED STUDIO和RT-STUDIO。这些IDE一般都是使用的GNU汇编。正如我其他的文章里说的那样。然而最近我看了一本CM4的书,我又想起当时用KEIL做事情的时候的故事。于是干脆重新打开KEIL,找找感觉。我从不否认,KEIL是非常优秀的IDE。只是之前有一阵子欧洲搞制裁,没得用了。既然现在又有的用了,拿起来感觉还是很香的。原创 2023-03-15 15:02:12 · 1295 阅读 · 0 评论