自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

超级喵窝窝的博客

至我亲爱的妻子大喵和孩子们

  • 博客(29)
  • 收藏
  • 关注

原创 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 929

原创 SEGGER Embedded Studio IDE移植FreeRTOS

SEGGER Embedded Studio虽然可以支持embOS,但是我们也可能更多的时候想移植FreeRTOS。这里我把做这个移植的操作放在这里。以便未来查阅。在本案例中,笔者不打算使用动态内存。根据上述步骤,完成FreeRTOS的移植。但是本例子中没有采用到动态内存。如果要启动动态内存,就在FreeRTOSConfig.h中把这一项启用;将heap_x.c挑1个放入工程文件夹中;手动实现vPortFree函数。这次这里就不做介绍。

2024-04-22 14:00:05 785

原创 Segger Embedded Studio IDE使用体验——默认的Section和Linker的设置

作为一名靠固件手艺吃饭的人,我一直是比较在意手头上的工具是否是趁手的。所以一直愿意尝试不同的IDE。一直是用的Keil。IAR没玩明白。最近Keil出了6,但是听说变成了依托于vscode的存在了。也不知道为什么,笔者对vscode天然就是反感。所以这两天尝试了一下Segger的Embedded Studio,感觉比Keil和ST的那个IDE来讲,还是有很多差异性的。快。编译链接、下载、调试、退出调试和运行都比较流畅。尤其是相比那些基于ecilips的IDE。支持性好。

2024-03-31 21:48:26 927

原创 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 689

原创 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 764

原创 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 1075

原创 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 1012

原创 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 300

原创 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 1050

原创 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 701

原创 KEIL 5.38的C编译器ARM Compiler V5

下载老版本的编译器安装包。安装到KEIL的ARM文件夹下创建的子目录里。在KEIL中选中并加入到编译器序列中测试编译这样就完成了v5编译器的安装。

2023-04-14 11:11:56 3014 1

原创 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 1254

原创 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 286

原创 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 365

原创 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 382

原创 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 1079

原创 使用CTEX生成中文pdf

现在说起来,我第一次学习LATEX的时候还是在2013年读书的时候。导师叫我去学习以便于未来写论文比较方便。当时由于主要用的是英文,所以没有什么大问题。然而当时在上课的时候,我就发现LATEX其实对部分西欧语言支持是比较好的,但是对于中文还是不行。这个问题最好是让LATEX编译器兼容UTF-8,甚至是unicode。虽然中间出现了CJK的解决办法,但是过于复杂,配置成功率不高,而且产生的问题也无法解决。最近经过一个朋友推荐,我发现CTEX还是可以用一用的。所以在这里写一下我的做法,给大家参考。这一步很简单,

2022-12-07 15:37:06 2852

原创 MSP430的汇编程序设计之三:TIMER0_A5中断与PWM输出

测试MSP430F6438的Timer0_A5的中断函数执行输出PWM名称型号测试板MCU调试器MSP-FET示波器HDO9404-MS根据手册的提示,可以实现在低功耗模式下PWM输出和定时器中断。

2022-11-09 16:24:55 624

原创 MSP430的汇编程序设计之二:汇编文件中调用C语言函数

还是上次那块MSP430F6438测试板。在开发中往往会用到C语言或者其他的语言或者技术开发的函数。我们在C语言开发环境的时候,往往会考虑,汇编的函数要怎么调用。其实在汇编下使用C语言还是很简单的。首先要声明,在汇编文件里不能直接使用C语言,至少笔者现在不知道如何实现。但是如果C语言的函数和汇编语言的函数在不同的文件中,那还是可以的。方法是,在汇编文件中引用C函数的函数名。接下来就展示。这里,对于MSP430来说,C语言函数的输入参数,如果是4个以内,包括4个,那么参数就是r12到r15;

2022-10-25 20:54:44 822

原创 MSP430的汇编程序设计之一:ACLK和SMCLK时钟输出

利用TSP-TS430PZ100C开发套件、TI汇编实现MSP430F6438的ACLK和SMCLK输出。

2022-10-21 15:35:55 1578

原创 基于ARM-Cortex M3/4的GNU汇编的嵌入式程序设计之五 —— STM32F103的数值文本转化函数的内联汇编实现

前面说了很多平板汇编的用法。相信大家都看到了汇编在CM3/4程序设计中的优势。但是有的时候,我们只是想优化一个算法,或者只是简单处理一个外设,或者我们单纯只是懒得创建汇编文件。那么,可以考虑采用内联汇编在C函数中完成这个任务。事实上,RT-Thread的PensSV异常就是采用内联汇编实现的。本文将用一个内联汇编来实现数值文本转化的函数。

2022-10-03 14:26:59 325

原创 基于ARM-Cortex M3/4的GNU汇编的嵌入式程序设计之四——我也会面向对象

看,汇编居然可以将数据块声明为object。所以说嘛,咱们汇编才是真正的面向对象哈哈。

2022-07-13 22:38:12 487

原创 基于ARM-Cortex M3/4的GNU汇编的嵌入式程序设计之三 —— STM32F407G-DISC1的FPU操作

最近那块陪了我8年的STM32F407-DISC板子烧了。好在公司买了块新的给我,心情大好。打算再鼓捣一下。Cortex-m4是有FPU的。但是好像很多人都搞不清楚要怎样设置才能使能。有的说在Keil的IDE设置里面怎么弄的,还有的说要定义什么宏的。那么,就要探索一下看看官方要求是怎么做的。为保证操作合规,我们要先查阅技术文档,了解清楚技术参数和初始化的方法。再看看指令集,用指令集做一点测试。最后看看C语言下面生成的语句是否合理。首先要说明一点,那就是CM3和CM4的区别就在cm4有浮点运算单元,也就是

2022-07-10 10:00:00 1670 1

原创 基于ARM-Cortex M3/4的GNU汇编的嵌入式程序设计之二——实现硬件I2C访问MS4525压力传感器

利用Thumb-2汇编实现stm32f103硬件i2c访问ms4525压力传感器的驱动。

2022-06-19 13:41:43 1168 2

原创 基于ARM-Cortex M3/4的GNU汇编的嵌入式程序设计之一——基本的程序设计

Thumb-2嵌入式汇编程序设计

2022-06-19 00:35:58 721

原创 嵌入式C编程中的设计模式之二——状态机模式

一、介绍二、状态机模式三、结论

2021-12-07 09:38:33 3877

原创 嵌入式C编程中的设计模式之一——单件模式和策略模式

用UML对设计模式建模,在嵌入式C的环境中实现,是高效可靠的开发办法。

2021-12-03 16:02:08 2449

原创 STM32F103与4525I压力传感器通讯中的硬件I2C的解决方案

一直以来总有人说STM32F103的I2C有BUG。所以大家一般都是用GPIO模拟I2C。而实际上,可以通过软件修复这个BUG,并启用硬件I2C。

2021-12-01 15:28:34 1044

原创 C++中有关类的创建的学习笔记——《C++ Primer读书笔记》

C++中有关类的创建的学习笔记——《C++ Primer读书笔记》

2019-10-24 12:09:27 1624

基于HX32F4开发板的Buzzer控制程序

基于HX32F4开发板的Buzzer控制程序。整合了前面设计的串口和STDIO支持。Buzzer可以设置频率和音量。

2023-04-12

常用的开发文档-ARM有关的手册

前面的ARM CM3/4的工程开发用到的一些文档。包括ARM、ARM汇编器、ARM汇编器ST的技术手册。 1、ARM Architecture Reference Manual Thumb-2 Supplement.pdf 2、DDI0403E_e_armv7m_arm.pdf 3、DUI0068ARM Developer Suite_Assemble guide.pdf 4、DUI0473C_using_the_arm_assembler.pdf 5、DUI0474F_using_the_arm_linker.pdf 6、rm0090-stm32f405415-stm32f407417-stm32f427437-and-stm32f429439-advanced-armbased-32bit-mcus-stmicroelectronics.pdf 7、stm32f407vg.pdf 8、FreeRTOS的文件 9、SD Card的协议

2023-04-05

STDIO-App的Keil工程

用ARM汇编器和Thumb-II实现底层的函数;用Keil的RTX配置RTX和Compiler的IO。实现了STDIO。可以使用stdio.h中的函数。 最后的测试是在HX32F4开发板上做的。

2023-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除