STM32
灵哎惹,凌沃敏
“任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。”
展开
-
实测STM32 DMA的数据传输速率不如CPU
用CPU和DMA同样搬运32KB的数据(内存到内存),对比搬运耗时。实测下来DMA搬运数据并没有CPU快,使用DMA只是省CPU并不省时间原创 2022-12-29 09:43:18 · 3666 阅读 · 5 评论 -
STM32F4 DMA的关键要点分析
STM32F4 DMA详解,有些比较难理解的概念讲的比较清楚原创 2022-12-14 19:03:56 · 1763 阅读 · 0 评论 -
STM32(ARM)核心知识记录
1.malloc和free函数是由C库实现,然后MDK做了适配,这就解释了为什么malloc函数知道堆区在哪里(为什么它能准确的在堆区申请内存)。2.当程序中没有使用到malloc时堆区是不起作用的,此时MDK会将其省略,也就你Heap_Size设置多大都不起作用。3.当函数的传递参数少于4个且总长度不大于16字节时,编译器会采用R0-R3来传递,不需要入栈出栈,也就不需要访问内存,提高速度。4.C的函数名能代表函数的起始地址,这点和汇编的label是一样的。...原创 2020-10-12 16:21:39 · 254 阅读 · 0 评论 -
ARM:导出汇编中的标志在C中使用
比如对于STM32,导出其栈底(注意是栈底)地址: EXPORT Stack_Mem //EXPORT前面一定要加Tab键,否则编译报错然后在C中extern: extern void Stack_Mem(void);然后就可以使用了,比如将其赋值给一个int型变量,然后打印出来:int k;k=(int)Stack_Mem;printf("k=%d\n",k);...原创 2020-10-12 15:57:12 · 284 阅读 · 0 评论 -
Free_RTOS错误:Error:..\FreeRTOS\portable\MemMang\heap_4.c,321
意思是某一个任务的堆设置得太小了;本次经查是START_STK_SIZE 设置得太小了(32),改成64或128即可。原创 2020-10-05 00:11:40 · 1703 阅读 · 0 评论 -
关于汇编 BX 和 BLX 跳转指令
BX:跳转到寄存器reg给出的目的地址处,如:BX R2BLX:跳转到寄存区reg给出的目的地址处并将返回地址存储到LR(R14)使用这两个指令时有一点特别需要注意:跳转的目的地址必须是奇数,若不是奇数则在后面加1,如某函数的起始地址是0x80000f00,则要跳转到此函数则应该跳转到0x80000f01处!否则会进入硬件错误中断!...原创 2020-09-22 13:50:39 · 5415 阅读 · 0 评论 -
数据存储的大小端格式问题记录
大小端定义:大端格式:即数据的高位存在低地址,如0x11223344,在存储器中从低到高的存储顺序就是0x11,0x22,0x33,0x44小端格式:即数据的高位存在高地址,如0x11223344,在存储器中从低到高的存储顺序就是0x44,0x33,0x22,0x11大端格式会更好理解一点,因为它是顺序的;小端格式会需要转换一下。STM32的内存和flash都是按照小端格式存储的。如何判别大小端:1.判别RAM的大小端方法1:定义一个32位变量,给其赋值0x11223344,再定原创 2020-09-08 13:59:01 · 1428 阅读 · 0 评论 -
STM32 CAN滤波器配置注意事项
1.最重要的一点,先看下图:图中显示滤波器可以配置为32位和16位两种模式,当处于32位模式时高11位是标准标识符、中间18位是扩展标识符、低三位为其它;而在16位模式时,高11位才是标准标识符;因此,在配置标准/扩展标识符时要注意左移;如在16位标识符列表模式时,要配置滤波器允许接收标准标识符为0x1234的帧:CAN_FilterInitStructure.CAN_FilterIdHigh=0x1234<<5,左移5位是因为高11位才是标准标识符。2.标准标识符只有11位,因此最原创 2020-08-31 11:05:18 · 3351 阅读 · 0 评论 -
stm32 各种类型错误:HardFault_Handler、MemManage_Handler、BusFault_Handler、UsageFault_Handler
STM32出现HardFault_Handler故障的原因主要有两个方面:1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。2、堆栈溢出。增加堆栈的大小。MemManage_Handler:访问了内存管理单元(MPU)定义的不合法的内存区域,比如向只读区域写入数据。BusFault_Handler:在fetch指令、数据读写、fetch中断向量或中断时存储恢复寄存器栈情况下,检测到内存访问错误则产生 BusFault。UsageFault...原创 2020-07-27 15:16:41 · 15966 阅读 · 1 评论 -
stm32 代码加密
1.设置读写保护 设置保护:if (FLASH_GetReadOutProtectionStatus()!=SET) { FLASH_ReadOutProtection(ENABLE); FLASH_Lock();} 解除保护:if (FLASH_GetReadOutProtectionStatus()==SET){ FLASH_Unl...原创 2019-08-29 15:02:15 · 3068 阅读 · 1 评论 -
cJSON移植到STM32编译无问题但是输出不对问题
cJSON中动态申请了内存,所以此时堆起作用了,程序默认的堆大小为 0x200,对于cJSON来说太小了,设置:Heap_Size EQU 0x00001000 即解决。...原创 2019-06-02 16:07:11 · 684 阅读 · 0 评论 -
关于STM32 CAN的过滤器/滤波器
1.在设置CanTxMsg.StdId时注意需要将其右移一位,比如如下滤波器配置:CAN_FilterInitStructure.CAN_FilterNumber=0;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_Filter...原创 2019-05-06 17:58:54 · 3924 阅读 · 0 评论 -
STM32F103与407,乘法、浮点乘法、带与不带FPU浮点乘法速度对比
主旨:测试在各种情况下CPU执行10万次乘法耗时主测试函数:void mutil_10w(void){ u32 mul=0; u16 a=112,b=62; u32 ka=0; for(ka=0;ka<100000;ka++) { mul=a*b; }}实验1:F103耗时:22.55ms 实验2:F103,把b改成大于0xff的数字耗时...原创 2018-07-26 14:38:45 · 27878 阅读 · 13 评论 -
CODE,RO-DATA,RW-DATA,ZI-DATA+单片机程序执行流程+堆(heap)和栈(stack)==精华详解
最近一直在研究单片机比较核心的东西,像题目中说的这些,于是在网络上找了好多资料,看了好多博文、论坛,再配合自己的实验,现在终于搞得差不多了,网上各位大侠的博文给了我不少帮助,在此先感谢各位大侠^_^一.CODE,RO-DATA,RW-DATA,ZI-DATA CODE:顾名思义,就是代码,指程序中代码即函数体的大小,注意程序中未使用的函数也会算在CODE中,也即会占用FLASH...原创 2018-07-01 18:44:50 · 3542 阅读 · 9 评论 -
STM32 IAP/BOOT,三步速成
Stm32的IAP现在已经是非常简单了,下面就教大家三步学成:前提条件:已经有Flash读写函数,这个函数好弄,很多stm32例程里面都有第一步(对于Boot程序):跳转到指定Flash位置函数,如下:void Jump_To_Application(const u32 startAddr){ Jump_To_App = (pFunction)(*(vu32*) (startAddr + 4));...原创 2018-04-27 00:16:47 · 2266 阅读 · 0 评论