嵌入式
文章平均质量分 59
嵌入式
tyustli
不抛弃,不放弃
展开
-
在 STM32 中使用 tinyusb 协议栈
在 STM32 中使用 tinyusb 协议栈。原创 2023-03-13 22:41:39 · 1636 阅读 · 0 评论 -
在 SRAM 中运行 STM32 程序
听说 STM32 的 FLASH 只能擦写 10000 次,一个开发板就算 1 天擦写 10 次 10000/10/365=2.73972602739726,那岂不是一个开发板用两年之后芯片就废了,好方啊,有没有 (其实如果你能做到 10000 次擦写,估计这个开发板你已经玩透了,把芯片刷过 flash 寿命,菜鸟也变成老鸟了)。如果你实在担心擦写 10000 次,那就可以试试在 RAM 中调试代码。原创 2023-03-12 20:07:51 · 1671 阅读 · 0 评论 -
对齐与非对齐访问
在机器指令层面,当尝试从不能被 N 整除 (addr % N!= 0) 的起始地址读取 N 字节的数据时即发生了非对齐内存访问。举例而言,从地址 0x10004 读取 4 字节是可以的,然而从地址 0x10005 读取 4 字节数据将会是一个非对齐内存访问。这里 N 就是数据的自然对齐值。原创 2023-02-15 22:21:33 · 1810 阅读 · 0 评论 -
make 编译常用命令
make 显示详细编译过程make VERBOSE=1或者make V=1常用编译命令命令描述make V=0quiet build(default)make V=1verbose buildmake V=2give reason for rebuild of targetmake clean清除编译文件make -s编译时使用静默输出的配置编译结果输出到文件先对 linux 中的输出设备进行一下介绍。大家都知道,linux 系统中原创 2022-03-22 20:45:00 · 3376 阅读 · 0 评论 -
Linux 下安装交叉编译工具链
Linux 下安装交叉编译工具链这里以安装 GNU Arm Embedded Toolchain 10-2020-q4-major 交叉编译工具链为例下载交叉编译工具链https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads可以在 windows 中下载然后使用 FTP/scp(SSH拷贝命令) 传到 Linux,也可以直接在 li原创 2022-02-17 12:58:25 · 3321 阅读 · 0 评论 -
RAM 分类详解
RAM 分类详解RAMRAM:Random Access Memory(随机存取存储器)SRAMStatic Random Access Memory 静态随机存储器,就是它不需要刷新电路,不像动态随机存储器那样,每隔一段时间就要刷新一次数据。但是他集成度比较低,不适合做容量大的内存,一般是用在处理器的缓存里面。DRAMDynamic Random Access Memory 动态随机存取存储器,需要不断的刷新,才能保存数据。SDRAMSynchronous Dynamic Random原创 2022-01-14 20:15:00 · 1446 阅读 · 0 评论 -
常用反汇编命令
gcc 反汇编arm-none-eabi-objdump.exe -d .\rtthread.elf > rtthread.asmarm-none-eabi-objdump.exe:反汇编用到的编译器-d :disassemble 表示反汇编rtthread.elf:表示需要反汇编的文件rtthread.asm:生成的汇编文件的名称(注意前面的 > 符号)armcc 反汇编D:\SoftWare_Application\Keil_MDK_5.32\ARM\ARMCC\bin原创 2021-07-22 07:49:28 · 4605 阅读 · 0 评论 -
使用 Ozone 调试 RT-Thread
使用 Ozone 调试 RT-Thread简介Ozone 是用于嵌入式应用程序的全功能图形调试器。相 Keil 而言, Ozone 对死机重连更加友好,不会复位芯片使用Ozone 在板子没有死机的情况下,也可以通过以下方法 Attach 上去,并单步调试,类似 Keil 的功能。但是它的栈解析并不如 Keil 的好。Ozone 在调试死机问题时较为有用。以下以一款 Cortex-a 的芯片为例,讲解 Ozone 的基本使用打开软件,创建一个新的工程选择目标器件选择通信方式选择目标文件原创 2021-07-21 20:47:32 · 1966 阅读 · 3 评论 -
数据校验--累加和校验
1、SC(SumCheck)累加和校验 所谓累加和校验实现方式有很多种,最常用的一种是在一次通讯数据包的最后加入一个字节的校验数据。这个字节内容为前面数据包中全部数据的忽略进位的按字节累加和。比如下面的例子: 我们要传输的信息为: 6、23、4 加上校验和后的数据包:6、23、4、33 这里 33 为前三个字节的校验和。接收方收到全部数据后对前三个数据进行同样的累加...原创 2018-12-26 19:09:14 · 16765 阅读 · 0 评论 -
数据校验--BCC校验
BCC(Block Check Character/信息组校验码)即异或校验法1、使用范围:适用于大多数要求不高的数据通讯。2、应用场景:IC卡接口通讯、很多单片机系统的串口通讯都使用。3、实现步骤:很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把它附在通讯数据的最后一起发送出去。接收方收到数据后自己也计...原创 2018-12-26 13:45:14 · 11011 阅读 · 3 评论 -
数据校验--CRC校验
工作原理: CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 循环冗余校验码(CRC)的基本原理是:在K位信...原创 2018-12-11 16:05:27 · 4097 阅读 · 0 评论 -
数字滤波--递推平均滤波
#define RM_BUF_LEN 10 /*递推数组的长度*/uint16_t RM_Filter_Buf[RM_BUF_LEN]; /*保存数据的递推数组*/ uint16_t ADCx_Recursive_Mean_Filter(uint16_t get_adc){ uint16_t sum = 0;...原创 2019-01-17 09:46:38 · 2954 阅读 · 0 评论 -
Realview MDK 链接脚本文件详细解析(一)–链接符号
Realview MDK 链接脚本文件详细解析(一)–链接符号Realview MDK 链接程序使用了两种方式控制程序的链接,即链接控制命令选项和链接脚本文件链接脚本文件链接脚本文件类型一般为:xxxlink.sct链接符号说明当使用链接控制命令选项时,链接器定义了Image$$RO$$Base、 Image$$RO$$Limit、Image$$RW$$Base、Image$$RW$...原创 2020-03-15 23:05:58 · 677 阅读 · 0 评论 -
STM32-串口输出
使用 STM32CubeMx工具配置好串口外设。1、uart.c 中定义 bufchar debug_buf[128];2、uart.h中实现串口输出函数#include<stdio.h>extern char debug_buf[128];#define debug(...){ \ int len = 0; \ len = snpr...原创 2020-01-07 20:42:36 · 376 阅读 · 0 评论 -
STM32---注释和调试打印
// 注释方法1/* 注释方法2*/#if 0注释方法3#endif方法1:适合单行注释方法2:适合多行注释方法3:如果多行注释里面还有注释,这种方法就比较适合#define DEBUG_ON // 在底层的打印驱动 定义一个宏#ifdef DEBUG_ON#define DEBUG(format, ...) do{ \ ...原创 2018-10-10 12:54:00 · 477 阅读 · 0 评论 -
MDK---Keil生成.bin文件和hex文件
一、Keil生成bin文件1、右键工程名,选择:Option For Target"xxx" 或者直接点击魔术棒2、选择User:3、选择After Build/Rebuild下的 Run#1如上图所示4、添加路径:"D:\keil for arm\ARM\ARMCC\bin\fromelf.exe" --bin --output ..\OBJ\rfid.bin ..\...原创 2018-10-29 13:10:10 · 14244 阅读 · 2 评论 -
STM32--Keil仿真查看引脚输出波形
步骤1、点击:options for target(魔术棒)步骤2、点击Debug步骤3、选择use simulator步骤4、将上图④、⑥修改为指定值,将⑤、⑦修改为自己芯片的型号步骤5、进入Debug模式 步骤6、点击波形选项 步骤7、点击出现窗口中的Setup选项,添加要观察的IO口在输入端口是输入 例如要观察PC6、7、8、9,则依次新建输...原创 2018-11-20 22:41:09 · 24797 阅读 · 15 评论 -
STM32--通用定时器3生成4路PWM
static void GENERAL_TIM_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE); RC...原创 2018-11-28 14:49:43 · 2355 阅读 · 5 评论 -
STM32--ADC独立模式多通道DMA采集
static void ADC_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitTypeStructure; RCC_APB2PeriphClockCmd(ADC_SMA_GPIO_CLK|ADC_SEA_GPIO_CLK,ENABLE); GPIO_InitTypeStructure.GPIO_Mo...原创 2018-11-28 15:06:22 · 2150 阅读 · 0 评论 -
STM32--Code、RO-data、RW-data和ZI-data
MDK编译程序的组成: Code:代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。 RO-data: Read Only data,只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。C语言中const关键字定义的变量就是典型的RO-data。 RW-data: Read Write data,可读写数据域,它指初始化为“...原创 2019-01-08 09:19:38 · 11394 阅读 · 4 评论 -
STM32--assert_param断言宏
1、基本概念 宏定义 在stm32f10x_conf.h头文件中,有如下定义:/* #define USE_FULL_ASSERT 1 */#ifdef USE_FULL_ASSERT#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) void...原创 2019-01-14 13:17:53 · 481 阅读 · 0 评论 -
STM32--hex文件格式
hex 是 Intel 公司制定的一种使用 ASCII 文本记录机器码或常量数据的文件格式,它可以烧录到MCU中,被MCU执行的一种文件格式。一个hex文件由多条记录组成,而每条记录由5个部分组成, 格式如下: “:aabbbbcc[dd...]ee”用记事本打开hex文件如下::020000040801F1:1000000018050020050401087D0...原创 2019-01-09 22:48:02 · 859 阅读 · 0 评论 -
MDK--fromelf
shift + 右键 选择在此处打开命令行窗口环境变量如何添加:如何添加fromelf到环境变量文件说明:.bin 二进制文件.hex 十六进制文件.txt 文本文件.asm 汇编文件.axf 可执行文件(keil编译).elf 可执行文件(gcc编译).out 可执行文件(iar编译)1、fromelf --help;查看帮助2、fromelf --bin --outpu...原创 2019-05-09 23:13:23 · 1036 阅读 · 0 评论 -
STM32---PB3和PB4引脚
GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//打开AFIO时钟 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable...原创 2018-10-09 17:00:09 · 5785 阅读 · 0 评论