- 博客(21)
- 收藏
- 关注
原创 GPIO电平被篡改的问题
原因是因为在任务里有与这个IO同port口的模拟I2C在频繁的操作造成的。当操作模拟I2C IO口控制其电平时对于汇编来说并不是一条指令完成而是多条指令,第一步是先回读port口寄存器的值存于工作寄存器中,再去或上对应位,假设在回读前中断控制的IO口电平为低,此时保存到工作寄存器的IO对应bit位即为0。在这时候被中断打断拉高IO此时回到任务里还是会将先前工作寄存器的值设置到port寄存器里,造成GPIO一拉高随即马上变成低电平。应用场景是某个IO在中断里会被拉高,在任务里会拉低。
2025-06-22 15:15:42
876
原创 NXP S32K144 LPSPI中断发送完成标志提前置位但仍处于BUSY的问题
从以上可以得出结论,发送完成标志被置上是因为在装填完一个数据后,被其他中断切走了此时FIFO里只有一个数据因此在发完后总线便会停止硬件对发送完成标志进行置位,紧接着退出高优先级中断后继续装填剩余3个字节数据装填完后并没有马上发送完成而是回到任务里,任务得到发送完成中断标志后认为四个字节已经发送完成便进行下一步流程回读,而此时刚好撞上总线在发剩余的3个字节数据因此形成死锁。即其中一次装填数据的时间出现异常正常每次装填数据的时间应该是一样的,因此认为此处是出现中断嵌套了。3)查看中断是发生抢占。
2025-06-17 22:28:36
271
原创 字节高低位反转——查表法
在进行字节高低位反转时,往往都会通过移位去实现。而当有大量数据要执行字节反转时,用移位的话代码会执行较多时序且写起来代码量多易错。查表法主要是为了节省代码执行时序,增加MCU的执行效率。
2025-06-15 00:16:18
267
原创 数据结构——链表的创建、删除
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
2025-06-15 00:15:42
598
原创 AIS解析网站
以下列出的三个网站为AIS数据解析网站:http://ais.tbsalling.dk/#AIS Online Decoder. AIVDM & AIVDO NMEA MessagesAIS VDM/VDO Decoder / Parser| Maritec Solutions
2025-06-15 00:15:12
565
原创 HAL库的学习 ——内部EEPROM的使用
关于内部EEPROM的使用:开发环境Keil5,单片机型号STM32L071CBT6。EEPROM大小为6KByte,分为2块可以在hal库里的宏得知起始地址与结束地址。这边采用的是字节写入方式,将content变量写入addr地址中。这边读出来的是一个字32位而上面写入的是字节记得移位取值。3、上锁保护EEPROM;EEPROM的读取主要采用。2、将数据写入固定地址;1、解锁EEPROM;
2025-06-15 00:14:39
235
原创 HAL库的学习 ——FLASH的使用
还有写时注意,因为写是一页一页的写,所以先WriteFlash(0x08010000)在WriteFlash(0x08010004)会使得前面写的失效,如我的单片机一页是128个地址。注意使用函数读时只能访问4的倍数的地址即:ReadFlash(0x08010000)和ReadFlash(0x08010004)而不能访问非4的倍数的空间否则程序会跑飞。flash应用:将单片机未使用部分的flash来存储数据,以达到掉电保存数据的作用相当于EEPROM。也可以通过访问地址去读取地址的值并将其打印出来。
2025-06-15 00:14:04
259
原创 Keil MDK编译器下查看占用Flash和SRAM空间大小
转载:Keil MDK编译器下查看占用Flash和SRAM空间大小_如何通过c文件计算flash和rom大小-优快云博客
2025-06-15 00:13:31
457
原创 HAL库串口HAL_LOCK的问题造成的串口半双工的解决
使用HAL_UART_Transmit_IT()函数发送前关掉接收中断执行完后再开启接收中断即可避免,这里建议调用HAL_UART_Transmit_IT()函数,因为该函数是使用中断发送,函数里并没有执行发送内容只是开启发送中断配置要发送内容等,不会占用太多时序,所以短暂的关闭接收中断是允许的。= HAL_OK),避免多次调用发送函数时上一次发送还没执行完成,huart->gState处于HAL_BUSY状态不是处于HAL_UART_STATE_READY状态造成的此次发送失败。
2025-06-15 00:12:36
372
2
原创 HAL库的学习 —— 串口DMA配合空闲中断接收数据
串口采用DMA方式接收,MCU可以不用干预就实现外设到RAM传输,相较于中断方式大大提高MCU的运行效率,使得MCU可以腾出空来去处理其它重要事情。以下主要介绍HAL库关于串口DMA方式的配置以及代码实现,包括接收和发送。点击ADD将UART5的接收设为DMA接收方式。
2025-06-15 00:11:49
352
原创 HAL库的学习 —— ADC的使用
/等待转换完成,第二个参数表示超时时间,单位ms。数据右对齐的话能保证AD采集的数组是以高位在前低位在后的存放方式 ADCH:ADCL。AD_Value的值就是采集到的数字量。
2025-06-15 00:11:10
333
原创 HAL库的学习 —— 定时器的使用
定时时间 = (pre+1)*(per+1)/tclk;在这里pre = 2399,per = 999,tclk = 24MHZ。所以定时间为0.1s。接着选择时钟源,在这里选择内部时钟即24MHZ。
2025-06-15 00:10:25
392
原创 【Serial Port Redirector】如何使用串口重定向软件?
转载:【Serial Port Redirector】如何使用串口重定向软件?_windows系统重定向到串口设置-优快云博客
2025-06-15 00:09:17
546
原创 windows xp procession建共享文件夹
在虚拟机系统中右击“我的电脑”,映射网络驱动器。打开虚拟机点击虚拟机选项选择设置。启用共享文件夹添加主机路径。
2025-06-15 00:08:24
280
原创 HAL库的学习 —— SPI配置和使用 发送16位和8位数据
配置基本跟如上一致,只是位数改成了16位,调用发送函数的话。图中将SPI_CS 引脚设置为普通IO口便于直接控制。要发送数据的话直接调用以下代码。
2025-06-15 00:06:52
443
原创 PIC单片机学习遇到的一些问题
中断优先级的设置虽然能够比较合理的管理资源,但是如果在中断里写太多内容会导致另一个中断可能永远进不去的现象。比如在定时器中断里定20ms,但是中断里面处理的代码量太多超过20ms,则会出现另一个中断优先级低的刚等待定时器执行完要开始执行时,定时时间到了又进定时中断。有时程序出现AD采样的数值波动大往往是因为可能这时候的供电情况不同,可能你跟原先状态比关闭了什么开启了什么。由于系统与编译器不兼容问题,会导致编译器编出来的HEX有问题,可能会出现你即使烧写成功了,但整个机器还是没能运行起来的现象。
2025-06-15 00:05:56
222
原创 HAL库的学习 —— PWM的配置及控制
如图,配置出来的PWM频率为f = 24M/Pre/Per Hz,即24M/12/100 = 20kHZ。占空比P = pulse/per *100%,即60/100 = 60%。若想设置PWM的占空比则在程序里面调用函数__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1,80(占空比:80%));这里将系统时钟配置为24M,后续的PWM的频率计算和占空比计算都是根据以下配置为例。如图所示,将PA6引脚配置为定时器3并将通道1作为PWM输出。
2025-06-15 00:02:38
558
原创 【PIC单片机】关于结构体/联合体 字节对齐及位域操作出现的问题
上面的操作为对联合体的1字节对齐,解决了结构体的对齐是根据数据类型最大的变量对齐的情况节省了空间的分配,这里也做了位域的操作将8位拆分为2个变量其中一个占8位里的2bit另外一个占6bit。在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。2. 由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。无名的位域是不能使用的。从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。
2025-06-14 23:47:05
187
原创 【AIS的学习】02 SOTDMA和CSTDMA
当在同一个时隙发送两条消息或在两个时隙的中间发送消息时信道不会传输消息,导致用户出现接收不到的现象。CSTDMA又称为载波监听时分多址,CLASS B设备在一个10秒周期内随机选择10个候选时隙来识别,集中在标称报告时间,然后依次测试每一个时隙直到找到一个能发射的空闲时隙。如果10个时隙都被占用,则取消发射直到下一个发射周期。原文:https://blog.youkuaiyun.com/sunriver2000/article/details/85028193。版权声明:本文为博主原创文章,转载请附上博文链接!
2025-06-14 23:46:03
179
原创 【PIC单片机的学习】在MAPLAB X IDE中加入printf函数
当调试单片机时,通过串口打印变量的值来调试代码是一种很好的调试方式,本文将讲述如何在PIC单片机使用printf函数。使用的开发环境是MAPLAB X IDE V5.20,单片机的型号为PIC24EP64GP204。通过重定向函数fputc,即可将串口打印与printf函数关联起来。本文使用的例子是将MCU UART1与printf函数关联,具体代码实现如下。//printf函数映射。
2025-06-14 23:44:31
199
原创 【AIS学习】01 AIS系统的介绍
AIS系统又名船舶自动识别系统,根据AIS技术标准的规定,将每分钟划分为2250个时间段(即2250个时隙slot_count),每个时间段可发布一条不长于256比特的消息。AIS消息从总体上来分有以VDM和VDO开头,以VDM开头的表示收到的消息属于其它船舶的信息,以VDO开头的表示船舶自身广播的信息。AIS的消息从内容上来分有静态的消息和动态的消息,静态的消息指的是船名、MMSI、船参、呼名等;动态的消息指的是经纬度、船速、航向。
2025-06-14 23:42:27
307
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅