- 博客(44)
- 资源 (4)
- 收藏
- 关注
原创 编写bootloader相关的注意事项
1.问题:bootloader能够跳转APP,但是APP执行完初始化后卡死,不再进入while(1)主循环。需要在“魔术棒”的“user”选项卡中的“after biuld”一栏,勾选,并填入以下文件夹地址。2.升级时如果需要生成bin文件。
2025-02-17 16:37:50
177
原创 SPI从模式下,能收数据不能发数据
2、检查DMA的配置,SPI的配置,都没问题。进入MCU调试状态,看到DMA发送的时候它的TCNT寄存器是不断减少的,说明SPI正在配合DMA发送,DMA是正常工作的。4、最后才想到是GPIO配置的问题,检查发现,GPIO的速度寄存器没有进行配置。尝试加上速度寄存器的配置。3、SPI能够发出一个字节才会触发DMA的TCNT递减,所以SPI也没问题。1、检查了硬件,是芯片间直连的,MOSI有波形,但MISO是持续的高电平。所以大概率是软件问题。
2025-02-15 15:39:51
130
原创 stm32软件触发ADC转换时一直卡在转换完成
原因:配置了多个通道的ADC转换,并且定时器中断中和主循环中分别触发了不同通道的ADC转换,导致定时器中断中的ADC转换打断了主循环中的ADC转换,导致ADC状态无法恢复为转换完成。解决:把所有ADC转换放一起,要么都放在主循环,要么都放在中断里。
2025-01-21 16:53:32
158
原创 C语言 - 字节高低位反序
unsigned char Reverse_byte(unsigned char data){ data=(data<<4)|(data>>4); data=((data<<2)&0xcc)|((data>>2)&0x33); data=((data<<1)&0xaa)|((data>>1)&0x55); return data;}
2024-11-21 10:24:09
191
1
原创 keil用debug模式正常,但download之后就不正常的问题
因为GPIO_EXTILineConfig的第二个参数不能或起来使用,查看库函数的定义,对参数的断言有详细说明。原因在于外部中断的GPIO的AFIO函数使用错误。
2024-05-24 16:45:15
638
原创 USART1移植到USART3通信不了的问题
原因:USART1配置的波特率,在USART3里用不了。因为USART1是挂在高速的APB2上的,而USART3是挂在低速的APB1上的,两者的速率上限不同。由于原始版本的USART1配置的波特率高于了USART3的波特率上限,因此USART3通信不上。1、提高主频-提高USART3的波特率的上限。2、将USART3还原成USART1。
2024-04-16 12:32:27
531
原创 函数指针的清晰理解
解析:pFun和 (*pFun)是两个变量,且都是变量。给*pFun变量 赋值,或赋值给其他变量,就相当于。但是函数指针变量没有目标变量,只有目标函数的地址。pFun变量,存储的值是下面的目标变量的地址。*pFun变量,是目标变量本身。
2024-04-05 12:18:24
130
原创 主站按顺序循环发送1~8序号的数据帧,从站总是收不到1和2序号的数据帧
2、从站接收的速度太慢,表现为从站缓存区收到一帧数据帧后,从站没来得及读取,下一个数据帧就把上一帧数据覆盖了。导致1~2序号的数据帧一直收不到。加快从站的数据帧接收速度,或增加主站两个数据帧之间的发送时间间隔。1、确认主站发送的是否过快,从站在高速数据帧传输时接收不过来。
2024-03-27 09:15:45
237
原创 软件模拟I2C的流程
Slave->Master:2、Master要在SCL下降沿之前读取SDA的值,读取SDA之后Master立刻产生SCL下降沿。Master->Slave:2、Slave要在SCL上升沿之后立刻读取SDA的值。Slave->Master:1、Slave要在SCL上升沿之后立刻移出SDA的值。Master->Slave:1、Master要在SCL上升沿之前写入SDA的值。
2024-03-24 13:54:17
277
原创 modbus代码思路整理
4.USART_RX串口接收中断一直产生:一直接收到来自主站的数据 -> 则,一直复位TIM:打开TIM(5ms):Enable & TIM->CNT=0;3.接收到来自主站的数据:USART_RX串口接收中断产生 -> 则,打开TIM(5ms):Enable & TIM->CNT=0;5.来自主站的数据接收完毕:TIM(5ms)发生5ms超时中断 -> 则,关闭DMA_RX。/*1.等待接收来自主站的数据:USART_RX打开 & DMA_RX打开。3.打开TIM(5ms):Enable。
2024-03-24 11:46:08
240
原创 usart接受端 持续进入usart溢出中断服务函数
--其实就是上位机发第二帧数据的起始时刻发的太快了,而board上还在处理上一帧的数据,以及send回复帧给上位机(波特率太低,且数据量太大,导致发送的时间比较长),此时DMA接收是关闭状态的。原因:产生串口溢出中断的原因是usart中接受到了可读数据,但是没有被及时读取,导致第二个字节数据到达usart时没有地方存放,导致串口溢出中断。分析代码:采用MDA方式接收数据,实际上是很快的,不存在没有及时读取数据的情况。唯一的可能是DMA被关闭了,导致usart的数据没有被DMA及时读取。
2024-03-20 16:20:40
267
原创 求字符串长度:sizeof和strlen的不同
strlen:以字符串中的"\0"结束,且"\0"不计入strle的数量。sizeof:以字符串中的空格结束,且空格不计入sizeof的数量。
2024-03-14 13:48:08
355
原创 新加入的task,执行5~6次之后再也无法执行的问题
原因:新任务优先级较低,同时高优先级任务不主动释放CPU(tslptask)。导致低优先级任务无法执行。解决:在高优先级任务中加入tslptask。
2024-03-13 12:07:28
422
原创 问题:从站SPI的DMA接收到一次错误帧之后,以后所有的帧都错误了
因此:即使从站SPI检测CS线的变化,亦或是采用其他方式判断:SCK的跳动是主站发出数据的信号还是异常抖动。也无济于事,因为只要SCK跳动,SO就会移位输出。从站SPI发送的原理:不论CS的电平是高是低,只要SCK上升沿到来了(哪怕是主站初始化时的SCK跳动),从站SPI就会把数据移位到SO线。解决:绕过SCK的初始化跳动。确保等SCK初始化完毕之后,再初始化从站SPI,使能从站SPI。
2024-03-09 17:59:29
423
原创 DMA频繁进入传输完成中断问题
原因:先使能了DMA,才配置DMA传输完成中断,导致此错误。解决:应该先配置DMA传输完成中断,然后再使能DMA。
2024-03-09 14:06:31
1298
原创 串口收到的数据是乱码:与发送的数据不一致
串口收到的数据与发送不一致,一般是因为波特率设置与实际波形不一致:HSE配置与实际晶振频率不符。修改HSE为实际晶振的频率即可。
2024-02-28 17:06:07
1982
原创 MCU频繁进入串口溢出中断
MCU频繁进入串口溢出中断的原因:usart->dat中的存在有效数据的时候(未被读取),新的字节到来,要存入usart->dat,却没位置存放了。于是,产生溢出中断。其实就是没来得及读取usart->dat,产生的溢出中断。由于使用了DMA来接收usart->dat,所以,产生溢出中断是因为DMA没来得及读取usart->dat。检查代码发现是接收完一帧数据后关掉了DMA,且没有再次打开DMA!导致usart->dat没来得及被读取!
2024-02-28 17:03:59
611
原创 Source browser information appears to be out of sync, Please clean the proje
问题:IAR出现报错“Source browser information appears to be out of sync, Please clean the proje”
2024-01-25 09:18:09
1083
原创 Keil5:DEBUG模式正常执行,但是Download之后无法正常运行
Keil5:DEBUG模式正常执行,但是Download之后无法正常运行
2024-01-12 20:18:52
1361
原创 CAN总线上,主站发送帧太快时,从站会出现来不及发出回复帧的问题,导致从站总是回复主站的上一帧Request帧
根本原因是:主站发送帧太快时,帧接收到了从站的接收FIFO里,但是没有被读出来。如果这时主站再发送一帧数据,主站的前一个帧的才会被从站读到,主站再发一帧数据到总线,另一个没被读出来的数据帧才会产生新的从站接收中断读数据。FIFO是可以存放3条信息的,说明这里只有一条信息被读出了,另两条根本没读出来。
2023-10-26 17:02:28
377
原创 问题:USART无法进入接收中断
原因1:时钟TIM的超时配置不正确,时间太短!解决1:将时钟TIM超时时间加长。解决2:将接收中断ENABLE。原因2:接收中断未使能。
2023-08-01 11:36:12
920
1
原创 换新电脑后,Keil无法下载程序代码
解决:1、在Keil魔术棒的Debug选项卡中,选择与下载器对应的Debugger,我的是J-Link。2、将下图中的Reset and Run 前面 打上勾。原因:Keil软件配置错误。
2022-10-26 15:30:25
1927
原创 如何让Keil的Degug调试模式watch windows窗口内寄存器的值实时变化
2、在弹出的下拉菜单中点击preodic windows update。1、点击菜单栏的View。
2022-08-18 14:35:22
1459
原创 【20220818】以太网PHY层或类PHY层基于RS485通信问题
2、RS485看RS485物理层,检查电路外围如电子元器件的电阻值等是否正确。1、以太网看PHY层,检查电路外围如电子元器件的电阻值等是否正确。所以,外设灯不亮基本都得往硬件的找问题。通信外设IC的通讯灯不亮。...
2022-08-18 12:07:22
121
原创 【20220816】接触新的通讯协议编程时,只需关注通讯协议初始化和数据接收缓存和发送缓存
因为通讯协议的实现通常是由硬件或软件实现,比如以太网的PHY层芯片+MCU的ETH接口,PHY层芯片+MCU的ETH内部会提供数据的收发缓存,供程序员使用,编程的视角也只需着眼于“数据”。接触新的通讯协议编程时,只需关注通讯协议初始化和数据接收缓存和发送缓存。...
2022-08-16 16:22:30
1562
原创 【20220816】单片机开发是需要细心的
如果只将 GPIO_ReadInputDataBit(GPIOE,GPIO_PIN_13) 和 GPIOE->PID & GPIO_PIN_13作为主要的关注点,很容易判断出错误。导致调试代码时,程序员的工程思维逻辑都是对的,但是单片机的执行逻辑却稳定地出错。也就是程序员的工程思维逻辑和单片机的执行逻辑不一致的情况。GPIO_ReadInputDataBit(GPIOE,GPIO_PIN_13) 和 GPIOE->PID & GPIO_PIN_13 的计算结果是不一样的。...
2022-08-16 09:33:45
73
原创 【20220815】新板子第一次调试的错误大多是硬件的疏忽
Layout没问题,主要是硬件工程师绘制原理图的时候的一些判断上的问题,当他不知道项目需要什么接线方法的时候,没有向项目负责人确认,而是用了默认NC、默认没有上下拉、默认GND不需要引出。1、看门狗没有按照外设芯片的要求接VDD,而是被硬件工程师NC处理了。所以,及时沟通在团队合作中很重要,不然你画的板子地不断修修补补。2、拨码开关输入没有进行上拉处理。3、连接器P3没有GND端口。...
2022-08-15 10:12:40
88
原创 【20220810】STM32控制各类外设芯片的过程就是配置、读、写该外设寄存器的过程
STM32等 MCU控制各类外设芯片的过程:就是配置、读、写该外设寄存器的过程。1、外设芯片的各个功能寄存器的用途。3、MCU与该外设芯片的通信引脚。2、寄存器数据的逻辑含义。
2022-08-10 12:21:25
1572
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人