![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式软件开发
文章平均质量分 82
booksyhay
这个作者很懒,什么都没留下…
展开
-
GD32F4xx官方库踩坑记录
移植FreeRTOS+LWIP。参照官方例程:GD32F4xx_Demo_Suites_V2.6.2.rar地址:兆易创新GigaDevice-资料下载兆易创新GD32 MCUkw=GD32F4。原创 2024-04-10 09:16:46 · 909 阅读 · 0 评论 -
在GD32F4xx上移植FreeRTOS+LWIP
还有,官方支持包:FreeRTOSv202212.01.zip。原创 2024-04-08 16:57:18 · 572 阅读 · 0 评论 -
GD32F4xx移植UIP
OpenBLT中的XCPonNET模板使用的就是uIP。原创 2024-03-28 12:41:12 · 348 阅读 · 0 评论 -
STM32/GD32的以太网DMA描述符
继续梳理以太网的DMA描述符。原创 2024-03-28 10:29:35 · 611 阅读 · 0 评论 -
使用JLink仿真器实现调试打印的N种方法
这是最古老也是最简单的方法。电脑上面插一个USB转TTL,然后与MCU的UART_RX/UART_TX/GND连接起来。PC端再打开一个串口调试助手。两边的波特率一致,就可以收到MCU发过来的打印信息了。原创 2023-12-11 17:16:54 · 1266 阅读 · 0 评论 -
ARM官方推荐的JTAG/SWD接口
JTAG / SWD接口。原创 2022-09-07 16:08:16 · 3140 阅读 · 0 评论 -
再说说EPWM模块的全局加载
之前总结了EPWM模块的影子寄存器及其加载机制。EPWM模块的影子寄存器_booksyhay的博客-CSDN博客对于1型的EPWM模块,功能比较简单。影子寄存器主要针对的是PRD和CMP两类寄存器。TBPRD及其影子寄存器PRD的影子寄存器由TBCTL[PRDLD]标志位来控制。当PRDLD=0(默认值)时,使能影子寄存器。使能后,只有时基计数器TBCTR等于0的时候,TBPRD才从影子寄存器加载到活动寄存器。当PRDLD=1时,PRD的影子寄存器无效,软件写入TBPRD时立即生效。CMPA/CMPB原创 2022-04-23 15:07:54 · 1587 阅读 · 0 评论 -
JTAG管脚定义及详细说明(转)
SWD模式:JTAG模式原创 2022-03-02 10:04:56 · 5670 阅读 · 0 评论 -
TMS320F280025(DSP)配置ADC超出范围就关闭PWM
项目需求硬件设计时没有使用CPU的TripZone功能实现过压保护/过流保护。希望通过DSP的配置来实现。设计思路就是将ADCx.EVTy通过ePWMX-Bar送到ePWMx的TripZone。具体配置ADC的后处理模块(PPB)本款DSP有2路ADC,每路ADC有4个Post-Processing Block。每个PPB模块可以输出一路事件和一路中断信号。这里就利用ADC后处理模块的“超过上限”事件来实现。需要配置的有:PPB模块使能; ADCPP..原创 2022-01-13 10:14:50 · 4811 阅读 · 8 评论 -
VSCode中针对C语言的代码格式化配置
默认格式化工具打开设置(Ctrl + ,) ,选择“用户”配置,找到“文本编辑器” - “Default Formatter”:安装了C/C++插件后,即可选择:C/C++ ms-vscode.cpptools键入时自动格式化建议使能该选项:设置->文本编辑器->格式化->Format on Type:勾选后,当敲回车键时即可看到格式化的效果。C/C++格式化在用户 -扩展 -C/C++中,找到C_Cpp: Formatt...原创 2021-11-02 18:50:17 · 24013 阅读 · 6 评论 -
对高精度PWM(HRPWM)的理解
传统PWM的精度假定CPU工作频率为100MHz。PWM模块的计数频率也一样,则计数周期为10ns。假设PWM的开关频率为1MHz。使用向上计数模式。那么,计数周期PRD等于100.此时,比较值只能在0~100里面选。占空比的精度只有1%。也就是说,只能产生24%、56%这种整数的占空比,不能产生26.5%这种占空比。如果计数模式是使用“向上向下计数”,那么精度还会再降一半。这个精度是由PWM的“计数器和”“比较器”的原理决定的。因为PRD和CMPA都是整..原创 2021-10-21 18:01:33 · 15105 阅读 · 23 评论 -
28388D上电时从BOOT跳转到main过程分析
上一篇原创 2021-10-19 09:51:31 · 1440 阅读 · 0 评论 -
28388D上电过程汇编代码分析
复位向量复位向量的地址统一在0x3F FFC0处。0x003FFFC0处保存的是复位向量的地址,其值为0x003FD2AE。复位后CPU的状态PC指针指向0x003FD2AE,栈指针SP指向0x0400,XAR0寄存器为0xFFFFFFFF,其他寄存器全为0.进入InitBoot0x003FD2AE地址处保存的是厂家固化的InitBoot。汇编指令为:InitBoot的汇编源码可以找到其汇编源代码:D:\ti\c2000\C2000Ware_..原创 2021-10-18 17:11:26 · 1195 阅读 · 1 评论 -
28388D上电过程汇编代码分析
复位向量复位向量的地址统一在0x3F FFC0处。0x003FFFC0处保存的是复位向量的地址,其值为0x003FD2AE。复位后CPU的状态PC指针指向0x003FD2AE,栈指针SP指向0x0400,XAR0寄存器为0xFFFFFFFF,其他寄存器全为0.进入InitBoot0x003FD2AE地址处保存的是厂家固化的InitBoot。汇编指令为:InitBoot的汇编源码可以找到其汇编源代码:D:\ti\c2000\C2000Ware...原创 2021-10-18 17:07:43 · 939 阅读 · 0 评论 -
CCS中的IER和IFR寄存器:Symbol ‘IER‘ could not be resolved
问题现象main函数初始化时,关闭CPU的中断使能,清除不断标志,一般都是这么写的: IER = 0x0000; IFR = 0x0000;但是,CCS却提示:Symbol 'IER' could not be resolved可是呢,编译整个工程时,也不会报错。<Linking>Finished building target: "DCDC.out""D:/ti/ccs1040/ccs/utils/tiobj2bin/tiobj...原创 2021-10-16 11:17:03 · 9975 阅读 · 7 评论 -
TI C28x DSP的中断嵌套
介绍一个常见的问题是 C28x 中断是否可以嵌套。本文解释了如何通过对中断服务例程 (ISR) 代码进行简单更改来实现中断嵌套。本文假设读者已经熟悉以下内容: C28x PIE 模块:控制寄存器、向量表、PIE 组 C28x 中断控制寄存器:特别是 IER、IFR、INTM。 有关这些主题的更多信息,请参阅以下内容: TMS320C28x CPU 和指令集参考指南 (spru430) 中记录了 CPU 级别的中断以及 CPU 如何响应中断 该研讨会材料包含的C2.原创 2021-09-17 15:09:59 · 4771 阅读 · 1 评论 -
C28x 中断上下文的保存和恢复
C28x 上下文保存和恢复介绍本文介绍了 C28x CPU 的自动上下文保存/恢复。这也适用于带有 FPU 和 VCU 扩展的设备。其他资源上下文保存和恢复的详细内容在 《C28x TMS320C28x CPU 和指令集参考指南》(TMS320C28x CPU and Instruction Set Reference Guide (Rev. F)-spru430f.pdf)文档中。堆栈基础首先是关于 C28x 堆栈指针的一些事实:C28x 堆栈指针 (SP) 始终指向堆栈中的.原创 2021-09-17 14:39:26 · 1114 阅读 · 0 评论 -
TMS320C28x的中断
中断架构总览说明:总共有16路中断送入CPU。其中INT1~INT12的来源是ePIE,INT13和INT14是TIMER1和TIMER2.另外还有NMI和RTOSINT TIMER0中断与TIMER1和TIMER2不同,它不是直接送给CPU,而是先送到ePIE。 外部输入中断:从GPIO口经过Input X-BAR的选择后送给XINT1~XINT5,再送到ePIE 其他外设的中断都是先经过ePIE。中断传播路径说明:外设中断先到达外设中断标志寄存器中锁存:PIE...原创 2021-09-17 11:25:50 · 2557 阅读 · 0 评论 -
关于ITRAP中断
The ITRAP Interrupt问:是什么导致了非法 (ITRAP) 中断?无效指令被解码(这包括无效寻址模式)。操作码值 0x0000 被解码。 该操作码对应于 ITRAP0 指令。操作码值 0xFFFF 被解码。 该操作码对应于 ITRAP1 指令。32 位操作尝试使用@SP 寄存器寻址模式。地址模式设置 AMODE=1 和 PAGE0=1 是非法组合。问:如何调试 ITRAP?ITRAP 通常是堆栈溢出或缓冲区溢出的标志。要快速查看它是否是堆栈,您可以原创 2021-09-09 10:18:41 · 727 阅读 · 0 评论 -
TMS320F280025的BOOT流程
CPU启动流程根据启动时是否连接了仿真器,分为两种情况:Standalone Boot Emulation Boot独立运行时的流程Standalone Boot先看整体流程图:BOOT管脚配置BOOTPINCONFIGBOOT开始时,首先读取管脚配置PINCONFIG。管脚配置有2组:Z1和Z2.Z2的优先级比Z1的高。当Z2有效时,会忽略Z1的配置 。由于这个配置是一次性写入的,写入之后不能更改。因此,通常情况下,先全能Z1配置,保留...原创 2021-09-08 10:49:22 · 3580 阅读 · 1 评论 -
STM32硬件底层配置图解
时钟配置时钟树一般使用外设高速时钟HSE,经过锁相环PLL产生最大72MHz的系统时钟:然后,各路外设从系统时钟分频。可以将系统时钟输出。时钟流使用STM32Cube配置的结果:时钟配置结果在KEIL-MDK中看到的结果:GPIO配置GPIO原理框图GPIO输入工作原理框图说明:此时输出控制回路是断开的。 输入信号可以配置为上拉或者下拉。GPIO输入功能配置项 配置项 配置内容 ...原创 2021-08-31 15:38:29 · 1066 阅读 · 0 评论 -
串行通信接口SCI图解
结合DSP的SCI章节,详细讲解SCI通信原理。参考资料:TMS320F28xx技术参考手册:Serial Communications Interface (SCI)SCI模块总览说明:SCI模块有两路时钟输入(图中红色箭头)。一路是工作时钟(SYSCLK),另一路是位时钟,用于产生波特率时钟。位时钟来源于系统低速外设时钟(LSPCLK),并由外设时钟控制寄存器控制(PCLKCR7)。工作时钟频率比位时钟要高得多,要不然怎么能够对每一个bit通信位进行多次检测呢?(有些..原创 2021-08-20 17:29:17 · 11744 阅读 · 0 评论 -
STM32F103的RTC模块用作32位计数器
需求背景在使用FreeRTOS时,如果需要统计每个任务的运行时长及百分比,则需要提供一个计时基准。分别实现以下2个函数:void vConfigureTimerForRunTimeStats( void ); /* Prototype of function that initialises the run time counter. */unsigned long ulGetRunTimeCounterValue( void ); /* Prototype of function th...原创 2020-10-23 09:48:40 · 1496 阅读 · 0 评论 -
Cortex-M内核中的DWT计数器
DWT跟踪组件Cortex-M3 权威指南:16.2 TRACE COMPONENTS: DWTThe rest of the DWT counters are typically used for profiling the application codes. They can beprogrammed to emit events (in the form of trace packets) when the counter overflows. One typicalapplicat原创 2020-10-12 16:03:40 · 5540 阅读 · 1 评论 -
STM32中,单个字节按位取反后,不再是一个字节!
示例代码问题现象原因分析解决对策原创 2020-09-25 10:41:26 · 1827 阅读 · 2 评论 -
STM32定时器的定时周期
定时器原理框图计时周期计时周期由以下几个因素决定:1,时钟频率。一般为72MHz。2,预分频系数PSC计数器的时钟频率CK_CNT等于f CK_PSC /(PSC[15:0]+1)。如果想要72分频,则PSC寄存器的值应该为71.3,自动重装载寄存器。这里也要注意:在设置ARR寄存器时,也需要减去一。如果想要定时1000个周期,则寄存器的值应该设置为999.看手册中的例子:当ARR为0x36时,计数器序列为00~36,共37个值。...原创 2020-09-18 11:46:10 · 6183 阅读 · 0 评论 -
《程序员的自我修养》读书笔记3——使用KEIL研究ELF文件的重定位
空间和地址分配仍然采用上一节的代码。看生成的代码段。3个中间目标文件的代码段:fromelf -v a.o========================================================================** Section #1 Name : i.main Type : SHT_PROGBITS (0x00000001) Flags : SHF_ALLOC + SHF_EXEC原创 2020-09-14 11:40:51 · 463 阅读 · 0 评论 -
《程序员的自我修养》读书笔记2——使用KEIL研究ELF文件的符号表
代码参考第4章,使用如下代码:建立工程:编译结果:目标文件分析先看b.o文件:fromelf -v b.o打印结果:========================================================================** ELF Header Information File Name: b.o Machine class: ELFCLASS32 (32-bit) Da...原创 2020-09-12 11:06:18 · 729 阅读 · 0 评论 -
《程序员的自我修养》读书笔记——使用KEIL研究ELF文件
工具KEIL-MDKV5安装目录下(C:\Keil_v5\ARM\ARMCC\bin)有以下工具:主要用到的是fromelf.exe把该路径加入到PATH环境变量中:fromelf用法命令格式:fromelf [options] input_file fromelf -h即可打印出帮助信息。Product: MDK Plus 5.29Component: ARM Compiler 5.06 update 6 (build 750)To...原创 2020-09-11 17:09:16 · 2052 阅读 · 0 评论 -
《MDK的编译过程》读书笔记
程序编译和链接的过程ELF文件格式:分散加载描述文件参考资料:欢迎阅读《MDK的编译过程及文件类型全解》文档-by 秉火https://flash-rtd.readthedocs.io/zh_CN/latest/...原创 2020-09-11 11:31:05 · 176 阅读 · 0 评论 -
STM32的选项字节(option byte)
以STM32F103为例。选项字节的地址参见stm32f10x.h头文件中的定义:#define OB_BASE ((uint32_t)0x1FFFF800) /*!< Flash Option Bytes base address */选项字节的定义共有16个字节,定义如下:typedef struct{ __IO uint16_t RDP; __IO uint16_t USER; __IO uint16_t ..原创 2020-09-03 11:23:25 · 19265 阅读 · 0 评论 -
在线计算CAN波特率参数
网址http://www.bittiming.can-wiki.info/功能说明选择不同的厂家,可以显示其CAN外设中关于波特率参数的寄存器定义。输入外设频率和CAN通信波特率,可以计算出寄存器参数:列出的可能值:...原创 2020-09-02 14:18:00 · 4797 阅读 · 4 评论 -
KEIL-MDK仿真STM32系列CPU的调试参数设置
默认配置默认配置参数,只能显示SVD文件(System Viewer File)中定义的寄存器信息:进入调试模式后,Peripheral菜单中,可以显示外设寄存器的值:高级配置可以根据CPU的具体型号,配置特定的动态库。STM32系列的为DARMSTM.dll(TARMSTM.dll)然后,进入调试模式后,可以有更直观的对话框来显示外设寄存器,例如:CPU型号及对应的配置参数Peripheral Simulation for STMicroelectro.原创 2020-09-02 14:00:23 · 5710 阅读 · 6 评论 -
KEIL调试出现Access violation : No ‘write‘ permission错误的解决办法
问题现象在使用模拟器调试时,出现以下错误提示,导致不能连续运行:*** Error 65: Access violation at 0x40000004 : No 'write' permission解决措施将以下内容保存为debug_Cortex-M_use_simulator.ini脚本文件,并根据CPU的外设地址更改map指令后面的参数。配置选择为初始化文件:/* Usage: Project ==> Options for Target ==> Debu.原创 2020-09-02 13:33:41 · 6042 阅读 · 0 评论 -
Modbus协议
MODBUS协议的核心内容功能码 功能码 名称 描述 0x01 读线圈 READ COIL STATUS 对可读写型的状态量进行读取 0x02 读离散输入 READ INPUT STATUS 对只读型的状态量进行读取 0x03 读保持寄存器 ...原创 2020-08-24 14:00:44 · 532 阅读 · 0 评论 -
uboot官方http下载地址
uboot官方下载地址,无需密码https://ftp.denx.de/pub/u-boot/原创 2020-08-22 10:10:43 · 16987 阅读 · 1 评论 -
用SWO代替printf打印时的注意事项
用SWO代替串口实现printf打印功能,是个很高效的调试手段。但在实际应用中遇到一个问题。用法参考以下文章:SWO打印输出配置https://blog.csdn.net/ybhuangfugui/article/details/94378265使用SWO代替UART,实现Printf打印功能https://www.cnblogs.com/wanban/p/11789160.html问题现象使用仿真器调试时,在运行过程中死机。原因分析...原创 2020-08-19 15:50:40 · 527 阅读 · 0 评论 -
KEIL-MDK配置STM32的调试参数
新建工程时,默认的配置参数为:在进入调试模式后,System Viewer下面只能显示STM32F103xx.svd中定义的通用的Cortex-M3的外设。默认的svd文件在这里:更改参数如下:其中:Dialog DLL改为TARMSTM.dll,参数改为-pSTM32F103ZE。这个参数要根据CPU的实际型号更改。更改后,在调试模式下,外设中可以看到多了很多:打开后,可以直观地看到外设的状态,不再是像SystemViewer中的那样,只有一堆...原创 2020-08-13 18:27:58 · 1711 阅读 · 0 评论 -
STM32F10x的基本定时器
定时器TIM6和TIM7原理框图功能描述基本的功能:计数。计数时钟源:内部时钟(从RCC来的时钟)分频系数:TIMx_PSC寄存器(16位)(prescaler预分频寄存器)计数器CK_CNT的频率为CK_PSC / (PSC + 1)计数方式向上计数计数上限TIMx_ARR寄存器(16位)(auto-reload register自动重装载寄存器)计数到达上限后可以自动重载(TIMx_CR1.ARPE)可以产生事件或者..原创 2020-08-13 09:54:32 · 570 阅读 · 0 评论 -
YMODEM协议笔记
基本字符字符 ASCII码16进制 含义说明 SOH 0x01 STX 0x02 ACK 0x06 接收正确应答 NAK 0x15 重传 EOT 0x04 文件传输结束 CAN 0x18 Cancel,取消传输 C 0x43 帧格式帧头包序号数据包序号只有1字节,因此计算范围是0~255;对于数据包大于255的,序号归零重复计算。...原创 2020-08-07 15:35:56 · 809 阅读 · 0 评论