自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 字符型驱动的学习与编写

在ubuntu上的driver.c编译(ARCH=arm CROSS_COMPLIE=arm-linux-gnueablihf- KERNEL=kernel7 make modules)后会生成.ko文件,scp发送到树莓派是上sudo insmod pin4driver.ko 加载内核驱动,就是调用了代码里的init函数,将代码里的结构体加入到内核里面sudo chmod 666 /dev/pin4 (文件应用层上调用了dev/pin4文件) 给它读写的权限。

2023-09-09 22:44:31 74

原创 交叉编译记录

交叉编译:就是在一个平台上生成另外一个平台的可执行代码。我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行编译:就是在一个平台上生成该平台上的可执行代码c51的编译发生在kiel(集成环境上)stm32也是。

2023-09-09 18:02:00 55

原创 Linux-信号(Signal)

信号有一个名字和编号,名字“”SIG“”起头,信号被定义在signal.h中,使用kill -l可以查看所有信号,信号从1开始编号,0有特殊用法,入门版:函数signal高级版:函数sigaction。

2023-09-07 23:12:52 171

原创 FreeRTOS学习(下)

FreeRTOS从版本V8.2.0开始提供任务通知这个功能,每个任务都有一个32位的通知值。按照FreeRTOS官方的说法,使用消息通知比通过二进制信号量方式解除阻塞任务快45%, 并且更加省内存(无需创建队列)。在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件标志组,可以替代长度为1的队列(可以保存一个32位整数或指针值),并且任务通知速度更快、使用的RAM更少!

2023-08-21 02:53:58 44

原创 FreeRTOS学习(上)

Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源尤其是RAM资源,只有μC/OS-IIembOSsalvoFreeRTOS等少数实时操作系统能在小RAM单片机上运行。

2023-08-21 01:11:13 103

原创 进程间通信-----IPC

1.管道:速度慢,容量有限,只有父子进程能通讯2.FIFO:任何进程间都能通讯,但速度慢3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题4.信号量:不能传递复杂消息,只能用来同步5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存。

2023-08-19 22:28:45 26

原创 STM32学习-----温湿度LCD显示并上传服务器

一、项目需求 使用温湿度传感器模块(DHT11)获取温度及湿度,并将值显示在LCD1602上,同时通过蓝牙模 块透传到手机。 硬件清单 DHT11 LCD1602 HC-08 继电器 杜邦线二、LCD1602介绍及实战 引脚封装 RS、RW、EN三根信号线经常需要进行拉高/拉低操作,可以进行封装 #define RS_GPIO_Port GPIOB #define RW_GPIO_Port GPIOB #define EN_GPIO_P

2023-08-19 13:23:33 170

原创 STM32学习-----SPI

SPI是串行外设接口()的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

2023-08-19 12:36:58 142

原创 STM32学习总结-----IIC协议

IIC全称集成电路总线是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双 工同步通信方式。

2023-08-19 02:36:43 71

原创 STM32学习总结-----ADC

位数越多,分辨率越高,比如3.3v的电压,12位分辨率,每一个数值代表3.3/4096。转化时间:从转换开始到获得稳定的数字量输出所需要的时间称为转换时间。个通道在转换时又分为规则通道和注入通道,其中规则通道最多有。个通道一起共用这个寄存器,所以需要指定规则转换通道的转。存器控制着转换通道的数目和转换顺序,只要在对应的寄存器位。连续转换:转换一次之后,立马进行下一次转换。1MHZ,一般分辨率用12位,=4096。注入组:有特权的人(军人、孕妇)个周期,算出最短的转换时间为。中写入相应的通道,这个通。

2023-08-18 21:41:34 93 1

原创 STM32学习总结-----DMA

令人头秃的描述:,直接存储器访问提供在。

2023-08-18 17:19:50 102 1

原创 STM32学习总结------窗口看门狗WWDG

窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。窗口看门狗的本质是一个能产生。

2023-08-18 03:16:14 58 1

原创 STM32学习总结7-----独立看门狗IWDG

1、在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称看门狗(watchdog)。独立看门狗工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟(LSI),由 VDD 电压供电, 在停止模式和待机模式下仍能工作。

2023-08-18 02:26:11 142 1

原创 STM32学习总结6--------串口

串口发送数据,使用超时管理机制。

2023-08-06 17:23:44 143

原创 STM32学习总结5------感应开关盖垃圾桶

PWM波的频率不能太高,大约50HZ,即周期=1/频率20ms左右。

2023-08-06 00:38:07 33

原创 STM32学习总结4---定时器Timer(包含PWM)

116位向上、向下、向上向下自动装载计数器(TIMx_CNT216位可编程可以实时修改预分频器TIMx_PSC,计数器时钟频率的分频系数为165535之间的任意数值。34个独立通道(TIMx_CH14),这些通道可以用来作为:A.输入捕获B.输出比较C.PWM生成边缘或中间对齐模式D.单脉冲模式输出4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。5。

2023-08-05 02:46:52 401 1

原创 STM32学习总结3 电动车报警项目

单片机供电VCC GND接单片机,

2023-08-05 01:39:38 45 1

原创 STM32学习总结2 工程的开始

抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。为了兼容所有芯片,导致代码量庞大,执行效率低下。备份区域拥有两个专门的复位,它们只影响备份区域。,进一步会运行中断服务函数,实现功能,这样是软。当以下事件中之一发生时,产生备份区域复位。时钟打开,对应的设备才会工作。

2023-08-05 01:02:36 42 1

原创 STM32F103C8T6学习回顾总结1,编译工具的使用

e、工程管理,工程名以及地址,toolchain/IDE 选择 MDK-ARM 可以自动调用keil5。b、左上角搜索芯片型号,stmf103c8t6 ,再次确定。2、STM32CubeMX的使用,生成工程文件。c、点击对应的引脚进行配置、1、编译工具使用keil5,下载安装见笔记。d、system选择,可以重复修改。

2023-08-05 00:34:50 114 1

原创 嵌入式学习_linux开发day9

vi a.c 编写a.c文件 i进入输入模式 编码结束后按esc退出到命令行模式 ,输入:(冒号)wq ,gcc a.c -o 01a ,编译a.c生成文件01a, ./01a 执行01a文件。bridged(桥接模式)(每台都能上网,真机和虚拟机相互通信,不足就是每台都需要独立的dns,有的导致不能上网)NAT(网络地址转换)(每台都能上网,但是ip是假的,只能真机虚拟机访问服务器,服务器访问不了真机和虚拟机)动态操作 {头插法建立。:set nu 显示行数。

2023-04-25 11:31:39 28

原创 嵌入式学习_c语言基础day8

printf("姓名:%s\n 年龄:%d\n职业:%s\n科目:%d\n地址:%s\n ",per[i].name,per[i].age,per[i].work,printf("姓名:%s\n 年龄:%d\n职业:%s\n班级:%d\n地址:%s\n ",per[i].name,per[i].age,per[i].work,输入模式,命令行模式下 按:i,看到insert即进入输入行模式}2、gcc编译工具 gcc a.c -o a a.c是需要编译的c文件名字,a是生成的程序名。

2023-04-24 12:15:25 37

原创 嵌入式学习_c语言基础day7

printf("学号:%d , 姓名:%s, 性别:%c, 年纪:%d, 分数:%f, 地址:%s \n ",printf("第%d个候选人姓名:%s,票数:%d\n",i+1,p->name,p->tickets);printf("第%d个候选人姓名:%s,票数:%d\n",i+1,p->name,p->tickets);printf("请输入第%d个候选人的名字:\n",i+1);{1,"鲍帅","m",22,99,"安徽寿县"},{2,"ll","w",23,90,"安徽"}puts("查无此人!

2023-04-23 11:55:04 33

原创 嵌入式学习_c语言基础day6

/输出字符串,直接传入p指针即可,类似于数组名,不需要*截引用,如果要输出字符串中的字符,则输出%c ,*p;//malloc 是在堆区创建内存,之后程序结束只有系统才会释放内存,使用之后需要手动free释放掉内存。使用malloc函数要添<stdlib.h> p= (char *)malloc(12);//p有了具体的内存指向。

2023-04-22 12:53:55 40

原创 嵌入式学习_c语言基础day5

/此处会提醒,因为int*跟int(*p)【4】类型不一样,但是值是一样的。int* getscore(int n, int (*p)[4]){ //输入二维数组,用数组指针接收。()和【】的优先级大于* 所以强调是指针的话要(*p),函数的名就是函数的地址,用(*p)间接调用函数。puts("请输入: (1、求两者最大值,2、求最小值,3、求两数和)");puts("请输入该想查询第几个学生(1,2,3)");

2023-04-21 14:17:23 25

原创 嵌入式学习_c语言学习day4

//也可以写作:scanf("%d",array);printf(" 地址为:0x%p 值为:%d ",(p+i),*(p+i));void initarray(int *array,int len){ //地址可以用指针接收。//指针可以当做数组名使用。void reverarray(int *array,int len){ //数组的逆置。//数组指针,指的是数组,偏移的是一个数组。

2023-04-19 10:54:38 30 1

原创 嵌入式学习_c语言基础day3

数组传递,在函数中的sizeof(array)==8;因为传递的是首地址,形参中不存在数组的概念,即使括号中包含了数组的大小也没有意义,在os中用8个字节表示一个地址。8、外部变量:在函数外定义的变量,之后在定义位置以后的函数可以调用,全局变量:定义在开头的外部变量。7、局部变量 只在所处的函数内有用,函数的局部变量在调用函数是分配内存,调用结束释放内存。3、传递参数传递的是值,常量也可,数组作为参数传递的是数组的首地址可以写作。函数可以当做表达式,用的是它的返回值,函数也可以调用当做其他函数调用的参数。

2023-04-18 11:28:08 30 1

原创 嵌入式学习_c语言基础day2

printf("最大公约数=%d, 最小公倍数=%d",max,min);//两数的乘积等于最大公约数和最小公倍数的乘积。//再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。// 如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。if(array[j]<array[j+1]){ //冒泡排序降序排列。=0){ //辗转相除法:用较大数除以较小数,再用出现的余数(第一余数)去除数,printf("折扣是:%.2f",(float)zhekou/100);

2023-04-17 11:23:19 27 1

原创 嵌入式学习_C语言基础day1

continue结束本次循环。每次输入的时候,多个scanf或者getchar之间应该加一个getchar()吸收回车符,不然回车符会被输入。用break提前结束循环。while循环控制语句。第三章流程控制 选择结构和判断语句。变量的四要素:1、变量名 2、变量值 3、变量类型 4、存储单元、用if语句排列三个数字:(两两相比,进行交换,)进程/任务:跑起来的动态的程序。优先级低 ==程序=算法+数据结构。c语言6中关系运算符。

2023-04-16 00:54:47 58 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除