- 博客(58)
- 资源 (5)
- 收藏
- 关注
原创 08- AD/DA模/数转换
ADC规则通道配置函数:(ADC1的通道1第1个开始转换,转换周期为参数4)实验使用PA4发出模拟量电压,再从PA1引脚读取该电压。各个通道可以在单次、连续、扫描或者间断模式里进行工作。
2023-08-17 22:58:41 140
原创 07- RTC实时时钟
RTC_DIV根据RTC_PRL中的重装载数值开始递减计数,输入的时钟源的高低电平(或上升沿),RTC_DIV减到0时重新装载计数,从而由RTC_DIV输出产生了TR_CLK。可以通过编程产生最长为1秒的RTC时间基准TR_CLK。从TR_CLK之后的模块可以产生3种中断:<1>根据TR_CLK的计数产生秒中断;<2>根据RTC_CNT对TR_CLK计数,产生溢出中断;<3>当计数器RTC_CNT中的数值与RTC_ALR中数值相等时,会触发一个闹钟事件,同时产生闹钟中断。
2023-08-17 22:35:36 140
原创 05- 定时器
由于系统函数程序中默认的是APB1=36MHz,次处设置APB1的分频系数是2,所以根据前面的介绍得出,Tclk=72MHz。根据要求,Tout=500ms,由于系统的时钟频率为72MHz,如果设置APB1的频率是AHB的2分频,即36MHz,此时就要考虑APB1的分频系数了,初始化时LED为灭,while中点亮,如果复位则灯闪烁,喂狗后灯一直亮。<1>分频系数为1,即不分频,则输出的CK_PSC=36MHZ,即Tclk=36MHz;设置窗口值时,窗口值是7位,所以存在8位值->7位的变换,使用&运算。
2023-08-17 22:22:38 101
原创 04- 串口
串口1的中断处理函数:判断接收是否为空,0为空;由串口助手发数据接收后再发送到串口助手显示。常用的寄存器:还有USART_CRx,x=1/2/3(控制寄存器,作用:相关的中断使能)这是基本的串口操作,串口的其它标志参考《stm32中文参考手册》。串口初始化函数:(记住大概参数,右键Goto…
2023-08-17 21:51:58 42
原创 02- 系统时钟
相关函数分为几类,如果自己写时钟函数或者修改时钟可以调用或修改函数的参数:先时钟初始化再执行main函数,可修改函数中直接对寄存器进行操作…如果想改变系统时钟的频率可以直接修改“system_stm32f10x.c”文件中的注释内容在该文件中还有一个变量“SystemCoreClock”可用于获得当前的系统时钟频率的值初始化为72MHz,则Systick定时器是一个简单的定时器,在M3和M4内核中都有。常用来定时,实现实时系统的心跳时钟等,可以节省MCU资源,不用再占用定时器资源。《Co
2023-08-17 21:44:21 32
原创 01- 中断
外部中断线9 ~ 5分配了一个中断向量,共用一个中断服务函数;外部中断线15~ 10分配了一个中断向量,共用一个中断服务函数,加上0~4中断线服务函数,总共7个。对stm32的中断进行分组,分为0~4组。优先级高的中断先执行,先比较抢占优先级,再比较响应优先级。16条外部中断线,并不是有16个中断服务函数,系统分配了7个中断服务函数。一般在程序中只设置一次中断优先级分组,如果随意改变会造成中断管理混乱。EXTI0 --------EXTI线0中断。创建结构体、初始化参数、初始化结构体。
2023-08-17 21:30:36 68
原创 02-线性系统稳定性及劳斯判据
③ 如果特征根的共轭复根的实部σ_j为0,c(t)中包含(A_j cos(ω_j t) + B_j sin(ω_j t)这样的振荡分量,便会出现临界振荡或称为系统临界稳定状态,工程上认为临界振荡也是一种不稳定;从劳斯计算表可以看出,第一列无符号变换,特征方程系数均大于0 ,但s^3行为全0行说明有共轭复根存在,可通过辅助方程A(s)求出,令 A(s)=0得。② 反之,s_i、σ_j都是正值,那么当t→∞时,c(t)→∞,则c(t)是发散的,系统不稳定。(2) k取何值时,系统处于振荡状态,并求出角频率;
2023-07-22 11:01:47 5256
原创 03-频域分析(奈氏图、伯德图等)
频域分析(奈氏图、伯德图等)频域分析频率特性的基本概念奈氏图零型系统、Ⅰ型系统、Ⅱ型系统的奈氏图绘制伯德图基本环节对数频率特性三型系统bode画法闭环系统的频域三个性能指标相角裕度和幅值裕度频域分析控制理论的基本任务是分析控制系统的稳定性、快速性和准确性。时域法比较直观,但对于高阶系统阶数越高时域法越难求解特征根,所以比较适用于三、四阶以下的系统。但时域法比较难确定应该如何调整系统结构或参数才能获得预期的效果。因此,工程上出现了两种简便的分析方法:频率法和根轨迹法。最常见的是频率法,原因是:(1)
2023-07-18 23:16:55 1474
原创 RT-Thread-15-内存池
内存池在创建的时候先从系统中获取一大块内存(静态或动态),然后分成相同大小的多个小内存块,这些小内存块通过链表连接起来(此链表也称为空闲链表)。3,RT-Thread的内存池支持线程挂起功能,当内存池中无空闲内存块时,申请线程会被挂起,直到内存池中有新的可用内存块,再将挂起线程唤醒。2,为了提供内存分配效率,并且避免内存碎片,RT-Thread提供了另外一种内存管理方法----内存池(Memory Pool);内存池的内存分配方式是分配大量相同大小的小内存块。(2)容易产生内存碎片;
2023-06-25 22:36:13 224
原创 Rt_Thread-14-软件定时器
2、RT-Thread提供的定时器是以系统时钟节拍(OS Tick)的时间长度为定时单位,提供了基于系统节拍整数倍的定时能力,即定时数值是OS Tick的整数倍。例如一个OS Tick是10ms,那上层软件定时器只能提供10ms、20ms、100ms等时间精度的定时服务,而不能定时为15ms、25ms、35ms等时间;1、软件定时器由操作系统提供一类系统接口,它构建在硬件定时器基础之上(系统滴答定时器),软件定时器使系统能够提供不受数目限制的定时器服务;
2023-06-25 22:07:49 428
原创 RT-Thread-13-消息队列
并把消息缓存到自己的内存空间中,其他线程可以从消息队列中读取相应的消息并进行处理;RT-Thread中另一种线程间通信的方式—消息队列,它是对邮箱的拓展;消息队列能够接收来自线程或中断程序发出的。
2023-06-25 21:09:34 92
原创 RT-Thread-12-邮箱
邮箱中每一封邮件只能容纳固定4字节内容(32位系统,指针大小为4字节,故一封邮件刚好容纳一个指针);线程或中断程序将一封4字节的邮件发送到邮箱中,而其他需要的线程可从邮箱中接收这些邮件进行处理。RT-Thread中邮箱用于线程间通信,特点是:开销较低,效率较高。
2023-06-25 07:44:33 106
原创 RT-Thread-11-事件集
此处,可将A去某地的行为看做一个线程,将"到达目的地公交车到达公交站"、"B到公交站"看做事件发生,情况1是特定事件唤醒线程;RT-Thread中的事件集用一个32位无符号整型变量来表示,变量中的一个位代表一个事件,线程通过"逻辑与”、“逻辑或”,与一个或多个事件建立联系,形成一个事件组合。,指的是线程和任何事件之一发生同步,只要有一个事件发生,即满足条件;,指的是线程和若干事件都发生同步,只有这些事件都发生,才满足条件;事件集可用于"一对多"、“多对一”、“多对多"的线程同步;
2023-06-24 22:49:43 147
原创 RT-Thread-10-线程优先级翻转
当一个高优先级线程试图通过某种互斥IPC对象机制访问共享资源时,如果该IPC对象已被一低优先级的线程所持有,而在低优先级线程运行过程中可能又被其他中等优先级的线程占用,因此造成高优先级被较低优先级的线程阻塞的情况。提高占用共享资源的低优先级线程的优先级到与所以等待该共享资源的线程中优先级最高的那个线程的优先级,这样可以更快地执行然后释放共享资源,当原占有共享资源的低优先级释放该资源后,优先级恢复到原来的优先级。:使用信号量可能导致线程的优先级翻转,而互斥量可以通过优先级继承的方法解决优先级翻转问题。
2023-06-24 22:01:25 190
原创 RT-Thread-09-互斥量
(1)当线程持有它时,互斥量处于上锁状态,该线程拥有这个互斥量的所有权;相反,当这个线程释放这个信号量时,将对这个互斥量开锁,失去对它的所有权;(2)当一个线程持有互斥量时,其他线程将不能够对该互斥量进行开锁或者持有该互斥量;互斥量只有两种状态:LOCKED和UNLOCKED,分别代表上锁和开锁两种情况。(3)持有该互斥量的线程也能够再次获得这个互斥量(比如,递归持有)而不被挂起。互斥量(互斥锁)用于线程间互斥访问的IPC对象,是一种特殊的二值性信号量。
2023-06-24 21:28:53 197
原创 RT-Thread-08-生产者消费者问题
循环中,每次生产数据时,先获取缓存区信号量是否为空,这里给的初值5,初始时为5个空位;,循环中,每次读取数据时,先获取缓存区满的信号量,然后获取缓存区读写信号量,然后再进行读数据操作,之后释放缓存区读写信号量,最后释放缓存区空信号量;,生产一段数据,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待,如此反复;,从缓存区中一次只读取一段数据,只有缓冲区非空时才可读取,否则必须等待,如此反复;:生产者和消费者是相互协作的关系,只有在生产者生产之后,消费者才能消费;
2023-06-24 19:31:39 46
原创 RT-Thread-07-信号量
从示意图可看到,每个信号量对象都有一个信号量值和一个线程等待队列,信号量的值对应信号量对象的实例数目(资源数目),假如信号量值为N,则表示共有N个信号量实例(资源)可以被使用,当信号量实例数目为零时,再申请该信号量的线程就会被挂起到该信号量的等待队列上,等待可用的信号量实例(资源);PS:可以想象成,信号量是停车场管理员(包含空余停车位数量、满/空等信息),需要进入停车场的车辆为各个线程,没空位就按停车场管理员的要求排队,有车位就根据管理员反馈的数量进入停车场;
2023-06-24 11:26:15 76
原创 RT-Thread-05-空闲线程和两个常用的钩子函数
RT-Thread实时操作系统的空闲线程提供了钩子函数,这种空闲线程钩子函数可以让系统在空闲时执行一些不紧急的事务,例如,系统运行指示灯闪烁,CPU使用率统计等等这些;在thread1等待函数rt_thread_mdelay(500);执行的时候,系统会调度空闲函数执行,空闲函数会调取钩子函数去执行。空闲线程还负责一些系统资源回收以及将一些处于关闭状态的线程从线程调度列表中移除;在Kernel / idle.c中有空闲函数相关的函数;空闲线程在形式上是一个无限循环且永远不被挂起的线程;
2023-06-24 10:14:22 190
原创 RT-Thread-04-时间片轮询调度
时间片只在处在就绪态的线程当中优先级相同的线程之间起作用,优先级相同的就绪态线程,由于优先级相同无法通过优先级高低来抢占资源,这时通过各自线程的时间片来轮换占用系统资源,时间片起到了约束线程单次运行时长的作用,其单位是一个系统节拍(OS Tick);RT-Thread最大支持256个优先级(数值越小优先级越高,0为最高优先级,最低优先级预留给空闲线程);优先级和时间片是线程的两个重要参数,分别描述了线程竞争处理器资源的能力和持有处理器时间的能力。对于STM32默认设置最大支持32个优先级;
2023-06-24 08:42:30 252
原创 RT-Thread-03-栈空间分配
先将线程栈空间大小设置一个固定值(比如2048),在线程运行时通过查看线程栈的使用情况,再根据使用的情况合理修改设置栈空间的大小,一般栈空间最大使用量设置为70%在drv_gpio.h中有对引脚IO的驱动配置。
2023-06-24 08:01:46 332
原创 RT-Thread-02-线程创建
RTT中没个线程都具有独立的栈空间,在进行线程切换时,系统会将当前线程的上下文保存在线程中,当线程要恢复运行时,再从线程栈读取上下文信息,恢复线程的运行;线程上下文是指线程执行的环境,具体来说就是各个变量和数据包括所有寄存器变量、堆栈信息、内存信息等;线程栈在形式上是一段连续的内存空间,可以通过定义一个数组或者申请一段动态内存来作为线程的栈。
2023-06-23 22:31:57 305
原创 进程02--无名管道
无名管道–适用于父子进程间,没有亲缘关系的进程之间资源没有继承关系,使用的管道也是独立的不是同一个。管道通信中,如果只有写端,没有读端,当管道写满时,写会阻塞。1.管道(有名管道FIFO,无名管道PIPE)3.system V-IPC之共享内存。4.system V-IPC之消息队列。5.system V-IPC之信号量。需要为:父进程-写,子进程-读;管道文件中,没有数据时,读会阻塞。父子进程之间通信使用管道。子进程-写,父进程-读;2.信号signal。
2023-06-23 19:04:49 243
原创 进程01--父子进程
时间片–>在该时间段中程序(或者说进程等)拥有CPU的使用权;当未获得时间片时进入就绪态,等待时间片。单核CPU是串行轮询执行不同进程;多核CPU是并行执行不同的进程;当进程得到时间片后进入执行态;CPU的调度策略:轮询的方式。
2023-06-23 18:57:32 99
原创 状态观测器
由原系统参数得出特征值,化为能观标准二型,通过比较目标极点对应特征方程与能观标准二型的特征方程之间的系数特出能观标准二型下的反馈矩阵,再变换到原系统下的反馈矩阵得到G。当然,原系统下的反馈矩阵G也可考虑使用PI调节传递函数代替。
2023-06-18 15:47:45 303
STM32库开发实战指南
2015-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人