
华大单片机开发
文章平均质量分 54
无
陌上花开缓缓归以
无
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
串口 IAP 升级
通过这一步设置,我们就可以在 MDK 编译成功之后,调用 fromelf.exe(注意,我的 MDK是安装在 D:toolMDKMDK5.23 文件夹下,如果你是安装在其他目录,请根据你自己的目录修改 fromelf.exe 的路径),根据当前工程的 LED.axf(如果是其他的名字,请记住修改,这个文件存放在 OBJ 目录下面,格式为 xxx.axf),生成一个 LED.bin 的文件。通过以上两个步骤的设置,我们就可以生成 APP 程序了,只要 APP 程序的 FLASH 大小不超过我们的设置即可。原创 2025-04-21 10:26:41 · 665 阅读 · 0 评论 -
stm32 挂死定位(死循环)
当进入中断时,CPU依次将xPSR,PC(Return Address),LR,R12,R3-R0压入堆栈。1,调式程序时先看初始化和轮询点灯流程,如果灯没有闪烁则表明程序进入了死循环。LR在异常后通常为0xFFFFFFFx,指示异常前的返回地址。5,dissassemly进入查看反汇编;0x08000735查看程序挂死位置。2,程序调式进入调式debug接口;,从而追溯到异常发生前的代码位置.程序异常后 LR会是以下的一种。3,打断点依次运行;原创 2024-11-02 19:13:44 · 870 阅读 · 0 评论 -
stm32 usart用不同的串口调式接口
该位由软件序列清零(读取 USART_SR 寄存器,然后写入USART_DR 寄存器)。这是开发板板载的一个 RS232(COM3) /ATK 模块接口(U17)选择接口(P2),通过该选择接口,我们可以选择 STM32 的串口 3 连接在 COM3 还是连接在 ATK 模块接口上面,以实现不同的应用需求.我们这里需要将PB10和PB11和com3的rx和tx进行连接后才能使用。检测到空闲线路时,该位由硬件置 1。该位由软件序列清零(读入 USART_SR 寄存器,然后读入 USART_DR 寄存器)。原创 2024-10-19 21:23:53 · 949 阅读 · 1 评论 -
keil5软件调试纪要(二)
(11)局部变量加入监控,监控后需要添加断点才能看变量值。2,除了printf调式外,keil5进行如下调式。(5)单步不进入函数,会跳过函数实现部分。(10)查看内存寄存器数据,可参考数据手册。(6)单步进入函数后,该按键退出该函数。1,连接ST-LINK后查看连接信息。(8)全局变量加入观察并且修改变量。(7)全速运行函数到该断点处。(9)更改后观察数据的数据。(12)查看硬件寄存器。(4) 单步进入函数。原创 2024-10-19 21:22:06 · 846 阅读 · 0 评论 -
keil5 断点调式纪要(一)
1,如何进入单步调式界面。2, 进入单步调式界面。5, 变量加入监控watch。原创 2024-09-24 20:12:31 · 1058 阅读 · 0 评论 -
stm32 gpio I/O模式以及iic访问
应答位为0 成功接收数据 应答位为1 表示来不及接收数据,SCK一个周期内,SDA为0为NACK, SDA为1 表示ACK。(2)GPIO_Mode_IN_FLOATING 浮空输入。(7)GPIO_Mode_AF_OD 复用开漏输出。(8)GPIO_Mode_AF_PP 复用推挽输出。(5)GPIO_Mode_Out_OD 开漏输出。(6)GPIO_Mode_Out_PP 推挽输出。(1)GPIO_Mode_AIN 模拟输入。(4)GPIO_Mode_IPU 上拉输入。4,ack/nack应答。原创 2024-09-24 20:11:40 · 541 阅读 · 0 评论 -
华大升级和启动过程解析(一)
System Init():一个标准的库函数,在system_hc32f460.c这个库文件中定义。其主要作用是配置系统时钟,这里面的时钟是需要用户自己配置的,华大芯片最高主频支持200M。_BL_HW_INIT_FN_HOOK 跳转到应用程序 MyHwInitFunc的标志。我们在用用程序中怎么升级app的呢,主要使用的中断向量表中的0x2c里面的UpdateHandler。__main:一个标准的C库函数,主要作用是初始化用户堆栈,并在函数的最后调用main函数进入C语言世界。offset为0x4.原创 2024-08-31 15:07:01 · 654 阅读 · 0 评论 -
M4 tm4c1294单片机软件调式总结
看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。(3)打印开关,在任务调度中添加有打印开关的打印帮助函数;(1)加串口打印初始化,单步跟踪查看,类似gdb的单步;3,什么时候使用互斥锁?原创 2022-11-27 14:45:36 · 872 阅读 · 0 评论 -
单片机addr2line的使用说明
编译后烧写相应的bin文件/csf文件到单片机,烧写后 发现程序挂死,有下面的打印错误提示信息,这个提示信息可以用来调式单片机了。1,单片机程序挂死了,无法用jlink调试时,我们一般怎么定位呢,我们一般借助外来工具addr2line工具来调式。将编译后生成的.csf文件拷贝到安装有addr2line的电脑上,在电脑上运行如下命令,得到对应的反编译信息。这样就可以定位到单片机挂死在get_sfp_sta和pollstatTask函数了。当程序挂死时,我们首先编译时选择c99,原创 2023-04-11 16:58:06 · 1195 阅读 · 0 评论 -
首次玩M4单片机项目遇见的坑
1,jlink的烧写注意事项,烧写成功后设备一端没有拔出jlink线,只拔出电脑一端jlink,导致串口连不上,需要两边都要拔出。一定要注意细节2,打印区别之 /n 和 /r/nwindow /r/n 可以打印首个字符串对齐3,串口没有初始化就是用uart封装的函数进行打印,导致设备挂死4,M4函数的调用关系,ROM_API_TABLE查看,怎么发现文档资料的...原创 2021-10-12 19:47:32 · 251 阅读 · 0 评论 -
修改keil5工程名称以及生成bin文件
1,修改output->Name of Excutable2,更改Manage project items->project Targets原创 2021-12-13 20:16:06 · 1332 阅读 · 0 评论 -
芯片文档阅读和学习
怎么去用芯片手册:1,查看芯片手册:(1),阅读工具:福昕阅读器 + 有道词典(截屏翻译)寄存器学习:在看datasheet 中有类似表达式如下:1'b0;表示1位二进制数(b),数值为0.3'b000这个表示:b代表二進制、3代表位元數。数值为0001'b1:表示1位二进制数(b),数值为01,一般除了可以宣告b外,也可以宣告為h(十六進制)或o(十進制)。Led重点:6.1.2,6.1.5,6.1.6MSB:最高有效位具有优先级...原创 2021-09-20 20:27:44 · 431 阅读 · 0 评论 -
JFlash烧写单片机bin/hex文件
通过 SWD 接口连接 Jlink 与HC32xxx 板子之后,在 J-Flash 的菜单的 Target,选择 Connect。烧写地址确认,是烧写板卡boot还是应用程序,boot的起始地址一般是0x0,应用程序根据具体情况确定。点击“Production Programming”,就可以自动完成烧录步骤(擦除、编程和校验)。点击“Production Programming”之后,可以看到擦除、编程和验证成功的提示框和提示。(2)烧写地址/或者cpu选型出错,检查自己的烧写步骤;原创 2023-12-08 10:05:43 · 1903 阅读 · 0 评论 -
TM4C129NCPDT学习总结
TM4C129NCPDT参考文档TM4C1294NCPDT 数据表, 产品信息与支持 |TI.com.cn查找文档,注意区分board和device代码查看举例:rom.h (ti.com)我们可以看里面的代码:现在我们看一下芯片文档:我们再来看看调用关系吗我们再来看看芯片文档...原创 2021-10-11 23:40:05 · 1216 阅读 · 0 评论 -
keil5建立工程
1,确认工程代码主要包括代码的目录或者代码的svn路径,其次再来确认代码的编译方法,确认该代码是需要keil5编译还是linux(gcc+makefile)编译。2,确认编译手段确认编译手段后,即是此项目使用keil5编译,那么再来确认Keil版本,以及keil5是否已经激活,权限是否拥有(liscense是否导入)。3,建立工程以上确认以后我们开始用keil5建立工程注:如果需要使用的工程已经建立,那么就使用keil5打开代码里面原创 2021-09-30 13:37:43 · 6178 阅读 · 0 评论 -
华大flash EFM使用(一)
0x0000_0000~0x0001_FFFF, 6Kbytes 配置在地址 0x0300_0000~0x0300_17FF。(EFM_KEY1 先写 0x01234567, 再写 0xFEDCBA98)(EFM_FAPRT 先写 0x0123, 再写 0x3210)1) 解除 FLASH 的寄存器写保护(EFM_FAPRT 先写 0x0123, 再写 0x3210)。(EFM_ F0/1NWPRTx(x=0~3)对应位设定为 1)(EFM_ F0/1NWPRTx(x=0~3)对应位设定为 1)原创 2024-08-25 18:15:33 · 1512 阅读 · 0 评论 -
HC32 华大DMA 传输
DMA_MONSNSEQCTLx, DMA_MONDNSEQCTLx:通道监视寄存器, DMA 每完成一。2) DMA_CHEN:通道使能寄存器,使能或关闭 DMA 通道, bit0~3 分别对应一个通道。17) DMA_DNSEQCTL0~3: 目标设备不连续地址传输控制寄存器,配置目标地址跳转的地址偏。DMA_BTCx, DMA_TCx, DMA_ERR 事件发生会将对应的状态位寄存器置位,6) DMA_RCFGCTL:通道重置寄存器,配置 DMA 重置后的相关参数,包括:剩余传输次数。原创 2024-08-25 18:14:21 · 1500 阅读 · 0 评论 -
华大FLASH之w25Q系列
时钟输入DI输入的第一字节数据提供指令代码。DI输入上的数据在时钟的上升沿上采样,W25Q64JV的标准/双/四SPl指令集由48条基本指令组成,这些指令通过SPI总线完全控制(见指令集表1-2)。指令的长度从单个字节到几个字节不等,后面可能是地址字节、数据字节、虚拟字节(无需在意),但是,所有写、编程或擦除指令都必须在字节边界上完成(/CS驱动高电平,在时钟位满8位之后),此外,当存储器被编程或擦除时,或者当状态寄存器被写入时,除了读取状态寄存器之外的所有指令都将被忽略,直到编程或擦除周期完成。原创 2024-08-22 15:08:35 · 1006 阅读 · 0 评论 -
HC32F460 IIC访问总结
关于华大单片机的I2C通信中的EEI(EEPROM Error Interrupt)、TEI(Transmitter Empty Interrupt)、TXI(Transmitter Interrupt)和RXI(Receiver Interrupt)这些中断,它们分别用于指示不同的I2C通信状态和错误。具体的I2C中断处理和配置需要参考华大单片机的数据手册和开发文档,这些文档会提供更详细的关于中断寄存器、中断配置和中断处理流程的信息。这通常发生在发送连续数据包时,当发送缓冲区清空时,触发TEI中断。原创 2024-08-09 14:30:59 · 1593 阅读 · 1 评论 -
AT24C08系列eeprom总结
1bytes(1个字节) = 8bit, 1block = 256bytes , 所以总共内存:8X256bytes = 2048bytes = 2kbytes= 16kbits,一个块 = 256bytes = 2kbit.1bytes(1个字节) = 8bit, 1block = 256bytes , 所以总共内存:4X256bytes = 1024bytes = 8kbits。A1和A0引脚未连接。AT24C08A,8K bits串行EEPROM:8K内部由4个256页的块组成,每个块4字节。原创 2024-08-01 14:37:53 · 1649 阅读 · 0 评论 -
单片机中断学习
1,中断源状态2,中断使能3,中断处理函数原创 2022-08-24 19:45:19 · 295 阅读 · 0 评论 -
uboot常用命令总结
uboot常用命令总结原创 2022-08-24 19:30:50 · 1642 阅读 · 0 评论 -
访问接口问题还是fpga/cpld问题
(1)我们都知道想要访问cpld/fpga/eeprom,这些带有存储功能的器件时,我们一般会采用总线的方式去访问,这个时候如果写进去的值或者读出来的值如果不对的话,我们一般是。(1)命令行实现接口的读写,如果单次的读写都有问题,很大可能是cpld/fpga问题;(2)如果在轮询中使用相关接口访问cpld/fga时,去掉轮询,一次读写访问;总线绑定失败,在总线访问存储器之前,需要建立相应的绑定关系。比如iic的通道选择,总线是否扫到相应的器件;(3)gdb单点跟踪,每次访问打印出相关的值;原创 2022-05-08 12:30:39 · 241 阅读 · 0 评论 -
按键驱动+中断
(1)中断服务程序(ISR);在按键没有被按下的时候,线程处在阻塞状态,等待着资源的到来,而当按键被按下的时候,首先产生一个中断,这个时候中断服务子程序会保存按键的值,并且唤醒阻塞的线程。中断阻塞函数:wait_event_interruptible(button_waitq, ev_press);当env_press == 0时,中断程序在阻塞睡眠状态:当env_press == 1时,中断程序被唤醒。唤醒函数:wake_up_interruptible(&but.原创 2021-09-20 23:07:35 · 332 阅读 · 0 评论