- 博客(23)
- 收藏
- 关注
原创 标准库发送数据深入理解USART
而为了解决第二个问题 我们引入第二个寄存器 TC寄存器 ,TC寄存器的数值就代表了在移位寄存器中的数据是否成功发送 如果TC标志位为0就代表了我们的移位寄存器中仍有数据未发送成功,若TC标志位为1就代表了我们的移位寄存器中数据已经发送成功 此时我们可以将TDR寄存器中的数据写入移位寄存器(补充一下 TDR寄存器中的数据更新到移位寄存器中的这个过程是硬件自动填充的 不需要我们手动来填充 而之所以要判断移位寄存器中的数据是否发送完成 是为了给我们程序员一个信号 告诉我们数据发送完成 可以开始进行下一步操作)
2025-02-05 16:52:50
697
原创 keil5如何添加.h 和.c文件,以及如何添加文件夹
如下这就是我们最终实现的目标,添加自己的文件夹,然后在这个文件夹下添加自己的.h和.c文件(如图led_control)
2025-01-31 23:53:12
2991
2
原创 iic通信底层讲解
所以我们iic设计了一个指针功能,我们把它设计在第二组数据 你可以理解为第二组数据的数据值就代表了我们要读写的起始寄存器是那个寄存器 比如下面这个程序的第二组数据就是00000100 这就代表我们从第四个寄存器开始写数据 至于只写第四个还是接着往后写,我们要根据实际情况来写。上图中的时序图是一种理想时序图但在实际的电路中时序的变化并不是突变的 它从低电平变换到高电平是有一个过渡的时间的,所以在某些时序图中表示方法是中间有一段过渡时间的。那么这个时候我们在第一组数据的最后一位引入读写位。
2024-12-26 23:26:30
859
原创 stm32通过串口读取JY61 JY62数据(HAL库)
先开启了串口二的中断回调函数,JY62是不断在给我们的单片机通过串口发送消息的,只要我们的单片机通过串口二接收到JY62发送的消息就会进入串口二的中断回调函数,进入函数后我们会对串口而接受的信息进行处理(为什么这么处理是因为维特智能给出了数据的处理方式,我把图片给到最后供大家看),处理完串口二从JY62接受到的数据之后,我们进入while(1)中,将数据通过串口一发送到我们的电脑。,串口一用来将串口二接受的消息发送给电脑的串口调试助手帮助观测数据。串口二用来接受JY62发送的串口信息。
2024-10-19 01:48:38
1316
3
原创 C语言内存分配
堆的内存释放由应用程序去控制,通常一个new()就要对应一个delete(),如果程序员没有释放,那么在程序结束后操作系统会自动回收。的全局变量也储存在常量区,const修饰的局部变量依然在栈上。等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)等函数释放内存时,被释放的内存从堆中被剔除(堆被压缩)保存全局的和静态的未初始化变量,比如 int a;用来保存全局的和静态的已初始化变量,比如。用来存储程序运行时分配的变量。储存在常量区的只读不可写。如函数调用所传递的参数。malloc注意事项。
2024-10-12 20:14:09
685
原创 RT-Thread实时操作系统 动态线程的创立
void th1_printf(void* parameter)中的程序也在一直运行,而引起这个现象的就是我们的多线程,我们借助实时操作系统RT-thread,来完成了多线程的操作。如下 这个函数就是我们创建的线程函数,我们可以理解为这个函数就是一个除了主函数之外的 int main,有了rt-thread之后我们可以理解为 我们就有了多个int main。我们可以通俗的理解为,我们以前用的单片机只有一个脑子,但有了rt_thread后,我们的单片机就有了两个脑子,可以同时处理多个任务。
2024-10-08 01:57:35
835
原创 链表的基础知识
链表是一种常见的数据结构,它通过节点之间的连接关系实现数据的存储和访问。链表的特点是物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。插入操作允许在链表的任意位置添加新节点,而删除操作则可以从链表中移除指定的节点。链表的优点包括灵活的内存管理、允许在链表任意位置上插入和删除节点。链表在计算机科学中具有广泛的应用,如动态内存分配、文件系统管理、队列和栈的实现等。但在真正的数据结构中,数据的存储是不连续的,那为了使这些不连续的数据之间有连续,我们加入了。
2024-10-01 00:20:29
260
原创 ESP8266wifi模块的使用
ESP8266简介ESP8266是一款由乐鑫公司开发的低成本Wi-Fi模块,广泛应用于物联网和家庭自动化项目中。Wi-Fi连接:ESP8266能够连接到Wi-Fi网络,支持多种加密方式,包括WPA/WPA2和WEP等。内置TCP/IP协议栈:模块内置了完整的TCP/IP协议栈,支持通过串行通信与外部设备进行交互。多种工作模式:ESP8266支持三种工作模式:STA(站点模式)、AP(接入点模式)和STA+AP(混合模式)。在STA模式下,模块可以连接到路由器,实现远程控制;
2024-09-28 00:12:54
1770
原创 DHT11温湿度模块协议编写
1.简介DHT11模块是一款常用的数字温湿度传感器,广泛应用于各种嵌入式系统、智能家居和气象站等领域,相比于 DS18B20 只能测量温度,DHT11 既能检测温度又能检测湿度,不过 DHT11 的精度和测量范围都要低于 DS18B20,其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90%RH(Relative Humidity 相对湿度—指空气中水汽压与饱和水汽压的百分比),误差在±5%RH2.与MCU的通信方式DHT11采用单总线通信1.电路讲解。
2024-08-23 23:06:46
695
1
原创 结构体对齐
还是上面同样的代码,这个时候如果我们使用了结构体对齐,在使用了结构体对齐之后下面这段代码在内存中所占空间就是12个字节(4+4+4=12),这个时候大家就会有疑问了,为什么在我们使用结构体对齐之后内存空间的占有比没有使用结构体对齐之前多了三个字节的存储,这又是为什么呢?在嵌入式的学生中,我们常会遇见结构体这样一个我们熟悉的老朋友,结构体中可以存储不同类型的数据,在一定程度上节省内存空间,方便数据的管理,而在结构体中我们又有一种数据存储的方式结构体对齐,而结构体对齐有以下优点。
2024-08-18 15:49:35
748
原创 HAL库串口重定向函数的编写和原理
在HAL库中我们想实现串口发送数据的功能时常用HAL_UART_Transmit() sprintf()这两个函数实现串口发送数据的功能,但在C语言中我们学习过printf这个函数,可以直接将所需要打印的数据打印在显示端,但由于在HAL库中是没有printf这个函数的,所以我们计划用重定向功能实现在HAL库中实现printf的功能。
2024-08-05 00:19:10
729
2
原创 STM32串口通信基本知识
在stm32中的多种通信方式中 我们最常用的就是串口通信,那为什么最常用的设备间通信的是串口通信呢,因为串口通信有以下优点:串口通信技术非常普及,几乎所有的PC电脑都配备了串口接口。此外,许多工业设备也普遍使用串口接口,这使得串口成为一种通用且易于实现的通信方式。:串口通信操作简单,只需要三根线(地线、发送线和接收线)即可完成数据传输。这种简洁性使得串口通信在实际应用中非常方便。:由于串口通信所需的硬件设备较少,通常只需要一个串行接口板,因此其成本相对较低。这使得串口通信在对成本敏感的应用中具有明显优势。
2024-08-01 15:02:21
765
原创 stm32常见通讯方式 和通讯方式之间的区别 串行并行 同步异步
在stm32的学习中,我们会用到很多种通讯方式,每一种通讯方式有其独特的方式和优点,那么我们今天就来讲讲通讯方式之间的区别,我们分为三个方向 1.同步和异步 2.串行和并行 3.方向与时间。
2024-07-28 15:28:41
564
原创 stm32HAL_GPIO_TogglePin电平反转函数 彻底读懂参考器手册 读懂寄存器
在hal库中我们经常会用到HAL_GPIO_TogglePin这个翻转电平的函数,对IO口的输出电平进行反转,但大部分初学者也只止步于会用 对底层函数和如何结合参考手册来配置寄存器并没有深入的了解,所以本人今天尝试用一篇文章进行讲解。
2024-07-27 11:41:17
5301
原创 stm32光敏传感器的使用 软硬件讲解
上图就是我们今天要讲解的光敏传感器,打开淘宝搜索光敏传感器就可以找到相关硬件和硬件所匹配的相关参数,我们平常使用光敏传感器来测量环境的明暗程度,在编程时,我们会使用单片机的IO引脚读取光敏传感器DO口返回的数字信号,并根据此数字信号进行相关编程,比如模拟一个路灯的工作环境:即当周围环境变黑时路灯亮起,或者就是我们初学嵌入式时经常写的简易版的循迹小车也是用该模块实现的。
2024-07-24 21:18:17
1689
原创 STM32如何彻底读懂参考器手册和底层函数以GPIO_SetBits为例
在学习stm32标准库的时候,参考手册是我们学习的主要工具,但由于参考手册的复杂程度,和底层函数的抽象,导致很多初学者很难真正读懂参考手册,不知道参考了个啥,看完更是一头雾水,还有函数底层函数的驱动也很难理解,所以今天本人斗胆要最基础的一个函数GPIO_SetBits来讲解如何对应参考手册和底层函数来理解。
2024-07-23 20:10:13
684
原创 STM32外部中断的配置(NVIC)
我们可以根据中断名称找到我们所需要配置的中断,然后就是中断号,我们可以根据中断号在我们的驱动文件中找到此种中断对应的函数值,我们用实际例子加深理解(图片来源于铁头山羊)我们看这个参数旁边的详解,解释到这个参数可以是IRQn_中的某个参数,我们继续跳转IRQn_根据37这个数字,我们继续回到底层驱动文件(这个文件就是我们刚才跳转的IRQn_),我们看图中的37 就是我们需要的函数参数。想要找到串口中断所需要的函数值,就要借助我们的中断向量表,我们打开参考手册翻到翻到9.1.2节。USART1的外部中断。
2024-07-21 09:10:07
1399
1
原创 stm32中AFIO重映射功能及如何在标准库中配置AFIO
这句话来自stm32参考手册,我们可以从中大概知道的是AFIO的作用就是把一些功能重映射到其他引脚上来解决复用冲突的情况(如何区分不清楚 通用 复用 重映射的区别的可以看我另一篇文章)在上图中我们可以知道的是,我们要用stm32定时器TIM1的四个通道来控制两个个电机,用stm32的USART1的TX和RX来与外部通信,但这个时候就出问题了,如果你读过stm32的引脚定义表,你会发现当 PA9 引脚被复用时定时器TIM1_CH2会和串口USART1_TX冲突(PA10同理),1.为什么要配置AFIO。
2024-07-17 23:58:11
2188
1
原创 STM32中断优先级 抢断优先级 子优先级 总优先级
所谓中断嵌套就是:已经发生了一个中断后又发生了一个中断,后发生的这个中断优先级较高,然后就先停止第一个中断,来完成第二个中断。
2024-07-17 16:37:29
711
原创 STM32开漏输出推挽输出 和默认情况
比如现在有一个外部电路提供了我们这个硬件所需要的电压 0~3.3v(这个范围内的一个值),我们就可以使用开漏输出,输出低电平来驱动硬件,你可以粗俗的理解为,在开漏模式下 我们输出低电平,这个低电平提供了“GND”。而PC13灯正好可以通过低电平驱动(下面的原理图有),这样我们就又学到了一个点 在标准库编程的前提下,我们不使用任何输出函数时,我们的开漏输出默认输出低电平。再开漏输出模式下输出高电平时电路处于高组态,无法输出3.3v高电平。外部电路(可以理解为外部电路提供电压)的情况下我们多选开漏输出,
2024-07-11 23:12:51
3357
原创 问题与工作总结
这段话在我的51学习中也起了很重要的引导,在初学51的时候手册看不懂,视频看不懂,很多硬件层面的知识看的人头疼 那种模糊感和不确定性让我难受,但只要成下心来慢慢看一遍不懂看第二遍直到看懂为止,总会有看懂的那一刻,而那一刻大脑给自身的反馈时极强的有一种柳暗花明又一村的感觉,这种感觉让我着迷,也支撑着我去面对那些模糊和不确定。在自己遇到全新的问题和烦恼时,能够忍住烦躁,直面问题,拆解问题,找到症结所在,最终化解问题,是一种美妙的感觉。这个坎过不去,就像肌肉受伤一样,恢复需要很长时间,甚至陷入忧郁症和畏难症。
2023-10-19 21:08:48
90
原创 关于新技术的学习
这周又是忙碌的一周暂时放慢了对c语言的学习,大概学习到结构体之后,剩下的内容准备在寒假的时候继续学习 加上前面学的那些东西让我消化都要好些日子 还有上篇博客总结的经验就是不要眼高手低 所以接下来的三个月对c语言学习的计划改为以输出为主 暂时减少输入 并将其任务主线度列为长期任务 列为长期任务后其重要度会相应下降 但其持续性会提高 保证每天能练一两道c语言的题 还有去看一下较为复杂的代码 尤其是那些语句嵌套的多的代码 然后下一步的主线任务就是51单片机的学习 为什么从51开始学习呢?
2023-10-13 17:48:06
83
原创 第一阶段关于c学习的一些总结
跟着B站的鹏哥学习c语言已经接近一个月左右,刚上大学感觉还是一时无法融入大学的环境与氛围中去 希望以后能有所改善吧。需要积累的东西 所以接下来的一个月我应该会调整方向 减少输入增加输出。
2023-10-11 09:51:56
103
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人