![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单片机
文章平均质量分 75
灵哎惹,凌沃敏
“任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。”
展开
-
GD32相较于STM32的优劣势-完全总结
GD32单片机的主频可以达到108MHz,而STM32的最大主频为72MHz,这意味着GD32在代码执行速度上具有优势,适合需要快速处理数据的场景。原创 2024-07-23 19:03:31 · 434 阅读 · 0 评论 -
KEA128 CAN问题记录
问题是这样的,我手上有两个CAN的工程,都是间隔一秒往外发送4字节数据,其中一个没问题,但是有一个却总是有时会变成“扩展帧”、“远程帧”之类的(我发送的都是“标准帧-数据帧”),两个工程的CAN初始化、发送接收函数等都是一样的,后面把主函数都改成一样的了,还是不行,最后把两个工程的“SKEAZ1284.h”文件拿来对比了一下,果然发现CAN的初始化结构体“MSCAN_MemMapPtr”有一些些不一样:以下是正常的:typedef struct { __IO uint8_t CANCT...原创 2020-09-10 16:00:27 · 913 阅读 · 0 评论 -
如何将一个函数编译定位到指定的地址
工程环境:Keil MDK5.31,STM32F407步骤:1.在分散加载(.sct)文件里面新增一个Flash段,段的起始地址就是你想要将该函数定位到的地址,段的大小就是该函数占用的flash大小,当然也可以大于实际大小:2.用宏定义+__attribute__((section))指令在代码中定义这个段:#define MY_FLASH __attribute__((section("my_ro")))3.用刚定义的“MY_FLASH”字段定义函数:MY_FLASH原创 2020-09-04 10:42:48 · 5452 阅读 · 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 · 3333 阅读 · 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 · 15665 阅读 · 1 评论 -
Error:..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,768
出现这个报错的时候说明:刚刚发生的中断中调用了系统的API函数,但是该中断的优先级超出了系统可管理的优先级范围;降低该中断的优先级或扩大系统可管理优先级范围即可解决。原创 2020-07-24 11:24:56 · 2694 阅读 · 1 评论 -
KEA128 CAN滤波器设置
苏州大学例程已经给出了配置成两个32位滤波器的设置,这里给个配置成4个16位滤波器的设置://设置成4个16位滤波器p->CANIDAC|=0x10;p->CANIDAC&=~0x20;//第1、2个滤波器//设置接收寄存器p->CANIDAR_BANK_1[0]=acc_id>>3;p->CANIDAR_BANK_1[1]=acc_id<<5;p->CANIDAR_BANK_1[2]=(acc_id+1)>>3原创 2020-07-10 15:06:04 · 926 阅读 · 0 评论 -
51单片机软件复位函数
51单片机无自带的看门狗,没有提供软件复位的函数和机制,要想实现软件复位,只能通过强制将PC指针指到0x0000位置,通过以下函数将PC指针强制指到0x0000:void reset(void){ ((void (code *) (void)) 0x0000) ();}...原创 2019-08-29 13:17:22 · 1383 阅读 · 0 评论 -
嵌入式代码稳定/抗干扰性增强措施
1.了解自己程序大概占用的堆栈大小,设置足够的堆栈余量,防止堆栈溢出2.尽量少用大数组,必要时可以将一个大数组分成几个3.对于关键的变量用 Volatile关键字修饰,尤其是会在多个线程/中断中调用的变量,否则你很可能取到错误的变量值4.对于在多个线程/中断中都调用了的函数,最好保证其不会被同时调用(即该函数在一个线程被执行时被另外一个高优先级线程/中断打断,进入该高优先级线程...原创 2019-04-12 19:31:29 · 783 阅读 · 0 评论 -
CC2530/IAR For 8051,数据格式/数值范围问题
一般来说:8位无符号整型: typedef unsigned char u8;16位无符号整型:typedef unsigned short u16;32位无符号整型:typedef unsigned int u32;64位无符号整型:typedef unsigned long u64;8位有符号整型: typedef signed char u8;16位无符号整型:typ...原创 2018-07-26 18:11:55 · 2225 阅读 · 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 · 27620 阅读 · 13 评论 -
IAR界面/字体效果设置
一直不喜欢IAR的界面效果,今天决定好好整改一番:所有的设置都在Tools->Option里面:首先是代码编辑界面,在Editor->Color and fonts 里面,设置成如图:主要是两项设置,一个是字体,还一个是C关键字,如extern和void等,原来是黑色加粗的,个人感觉一点都不明显,我把它改成深蓝色加粗了。然后是工程管理和编译信息界面,在Common fonts里面,如下...原创 2018-07-01 19:13:28 · 18066 阅读 · 0 评论 -
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 · 3536 阅读 · 9 评论 -
CC2530 实现无线串口
用CC2530实现无线串口可以说是最简单的了,话不多说直接看代码:1.初始化void RF_Init(void){ FRMFILT0 =0x0C; //静止接收过滤,即接收所有数据包 TXPOWER =0xD5; //发射功率为1dBm FREQCTRL =0x0B; //选择通道...原创 2018-06-04 16:01:09 · 3118 阅读 · 2 评论 -
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 · 2253 阅读 · 0 评论