STM32
文章平均质量分 83
自己总结一些知识,还请大佬赐教
想成为大师啊
这个作者很懒,什么都没留下…
展开
-
STM32启动文件浅析
STM32启动文件由ST官方提供,在官方的固件包里。启动文件由汇编编写,是系统上电复位后第一个执行的程序。初始化堆栈指针初始化程序计数器指针设置堆和栈的大小初始化中断向量表配置外部SRAM作为数据存储器(可选)配置系统时钟,通过调用SystemInit函数(可选)调用C库中的 _main 函数初始化用户堆栈,最终调用 main 函数ARM指针寄存器 —— 堆栈指针寄存器SP、程序计数器PC、连接寄存器LR堆栈指针R13(SP)原创 2024-10-21 19:54:54 · 1554 阅读 · 0 评论 -
UCOSIII存储管理
1.1、存储管理作为一个RTOS操作系统,内存管理是必备的功能,因此UCOSIII也就内存管理能力。通常应用程序可以调用ANSI C编译器的 malloc()和free()函数 来动态的分配和释放内存,但是在嵌入式实时操作系统中最好不要这么做,多次这样的操作会把原来很大的一块连续存储区域逐渐地分割成许多非常小并且彼此不相邻的存储区域,这就是存储碎片UCOSIII中提供了一种替代 malloc()和free() 函数的方法,UCOSIII中将存储空间分成区和块,每个存储区有数量不等大小相同的存储块,在一个原创 2021-12-07 12:13:40 · 955 阅读 · 0 评论 -
UCOSIII事件标志组和同时等待多个内核对象
1.1、事件标志组有时候一个任务需要与多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间有两种同步机制:“或”同步和“与”同步“或同步”:等待多个事件时,任何一个事件发生,任务都被同步,这个就称为“或”同步“与”同步:当所有的事件都发生时任务才被同步,这种同步机制都被称为“与”同步在UCOSIII中事件标志组为 OS_FLAG_GRP,如果需要使用事件标志组的时候需要将宏 OS_CFG_FLAG_EN置1...转载 2021-12-03 12:57:26 · 314 阅读 · 0 评论 -
UCOSIII消息队列
1、UCOSIII任务间通信1.1、任务间通信:一个任务或者中断服务程序有时候需要和另一个任务交流信息 ,这个就是消息传递的过程就叫做任务间通信,任务间的消息传递可以通过2种途径:一是全局变量,二是通过发布消息使用全局变量的时候每个任务或者中断服务程序都必须保证其对全局变量的独占访问。消息也可以通过消息队列作为中介发布任务。什么是消息?消息包含以下几个部分:指向数据的指针,数据的长度和记录消息发布的时间戳,指针指向的可以是一块数据区域或者甚至是一个函数。消息的内容必须一直保持可见性,可见性是指代原创 2021-12-01 03:00:37 · 761 阅读 · 0 评论 -
UCOSIII信号量和互斥信号量
1、UCOSIII信号量1.1、信号量简介:信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被锁部分代码的权限。一旦执行至被锁代码段,则任务一直等待,直到对应被锁部分代码的钥匙被再次释放才能继续执行。信号量用来控制对共享资源的保护,但是现在基本用来做任务同步用要想获取资源的任务必须执行 “等待” 操作,如果该资源对应的信号量有效值大于1,则任务可以获得该资源,任务继续运行。如果该信号量的有效值为0,则任务加入等待信号量的任务表中。如果等待时间超过某原创 2021-11-19 23:56:20 · 854 阅读 · 0 评论 -
UCOSIII软件定时器
1、UCOSIII软件定时器简介1.1、软件定时器简介:定时器本质是递减计数器,当计数器减到零时可以触发某种动作的执行,这个动作通过回调函数实现。当定时器计时完成时,定义的回调函数就会被立即调用,应用程序可以有任意数量的定时器,UCOSIII中定时器的时间分辨率有一个 OS_CFG_TMR_TASK_RATE_HZ,单位为HZ,默认为100HZ注意!一定要避免在回调函数中使用阻塞调用或者可以阻塞或删除定时器任务的函数。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另转载 2021-11-19 00:39:52 · 565 阅读 · 0 评论 -
UCOSIII中断和时间管理
1.1、UCOSIII中断:中断:应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的任务的过程叫做中断。如何在UCOSIII下编写中断服务函数!void USART1_IRQHandler(void){ OSIntEnter(); // 中断服务程序 OSIntExit();}串口中断服务函数:void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res;#ifdef SYSTEM_SUPPORT原创 2021-11-18 01:56:15 · 732 阅读 · 0 评论 -
UCOSIII系统任务
1.1、空闲任务:空闲任务特点:空闲任务是UCOSIII创建的第一个任务空闲任务是UCOSIII必须创建的空闲任务优先级总是为 OS_CFG_PRIO_MAK-1空闲任务中不能调用任何可使空闲任务进入等待态的函数空闲任务函数:void OS_IdleTask (void *p_arg){ CPU_SR_ALLOC(); p_arg = p_arg; /* Prevent compi原创 2021-11-14 15:56:44 · 406 阅读 · 0 评论 -
UCOIII时间片轮转调度
前提:时间片轮转法:主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按先入先出的原则排成一个队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为 10~100ms 数量级。当进程用完分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,把它放入就绪队列的末尾;然后,把它放入就绪队列的末尾;然后,把CPU分给就绪队列的队首进程,同样也让它运行一个时间片,如此往复。实现思想:时间片轮转算法的基本思想是,系统将所有的就绪进程按先来先服务算法的原创 2021-11-01 02:00:14 · 1247 阅读 · 0 评论 -
UCOSIII任务创建与删除
1.1、任务的创建UCOSIII 中要想使用任务,第一件事就是创建一个任务,创建任务使用函数 OSTaskCreate()void OSTaskCreate (OS_TCB *p_tcb, CPU_CHAR *p_name, OS_TASK_PTR p_task, void *p_arg, OS_原创 2021-10-21 02:34:33 · 728 阅读 · 0 评论 -
UCOSIII任务管理
UCOSIII下的SYSTEM文件夹1.1 delay.c文件夹中函数:delay.c文件是 ALIENTEK 编写的文件,主要是使用滴答定时器来完成高精度延时。在使用 UCOS 的时候还完成了针对 UCDOS 的相关配置,主要是滴答定时器作为 CUOS 系统时基的配置函数描述delay_osschedlock()任务调度器加锁,对UCOS中的对应函数做封装delay_osschedunlock()任务调度器解锁,对UCOS中的对应函数做封装delay_ostime原创 2021-10-10 00:12:00 · 1087 阅读 · 0 评论 -
RTOS系统
前后台系统:早期嵌入式开发没有嵌入式操作系统的概念,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。RTOS系统:RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性。实原创 2021-10-04 01:47:08 · 2327 阅读 · 0 评论 -
STM32ADC模数转换
参考正点原子ADCAnalog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。STM32F10x ADC特点12位逐次逼近型的模拟数字转换器。最多带3个ADC控制器。最多支持18个通道,可最多测量16个外部和2个内部信号源。支持单次和连续转换模式。转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。通道0到通道n的自动扫描模式。原创 2021-07-11 10:40:46 · 1005 阅读 · 4 评论 -
STM32DMA
参考正点原子视频DMA简介DMA全称Direct Memory Access,即直接存储器访问DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。作用:为CPU减负STM32最多有2个DMA控制器(DMA2仅存在大容量产品中),DMA1有7个通道。DMA2有5个通原创 2021-06-26 23:43:39 · 1032 阅读 · 0 评论 -
STM32IIC通信
参考正点原子视频IIC两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间,IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上IIC是半双工通信方式半双工:可以接收发送,但不能同时进行多主机I2C总线系统结构I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。I原创 2021-06-08 22:31:11 · 1006 阅读 · 1 评论 -
STM32SPI通信原理
参考正点原子视频SPI接口简介SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用于EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200SPI内部结构简明图SPI工作原理总结硬件上为4根线主机和从机都有一原创 2021-06-02 01:19:48 · 2815 阅读 · 0 评论 -
STM32输入捕获
参考正点原子视频STM32PWM工作过程一句话总结工作过程:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMx_CCRx里面),完成一次捕获。步骤一:设置输入捕获滤波器以通道一为例:1)当滤波器连续采样到N次个有效电平时,认为一次有效的输入电平。2)该数字滤波器实际上是个事件计数器,它记录到N个事件后会产生一个输出的跳变。例如:当f(CK_INT) = 72MHz, CKD[1:0原创 2021-05-30 23:02:48 · 2855 阅读 · 3 评论 -
STM32PWM输出实验
参考正点原子视频STM32 PWM工作过程通道(1)为例CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。CCMR:OC1M[2 : 0]位:对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。PWM模式1 & PWM模式2寄存器TIMx_CCMR1的OC1M[2:0]位来分析:PWM模式1或PWM模式原创 2021-05-29 01:46:39 · 1386 阅读 · 7 评论 -
STM32通用定时器基本原理
参考正点原子视频STM32定时器共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。高级定时器 TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。原创 2021-05-25 21:41:58 · 2309 阅读 · 0 评论 -
STM32窗口看门狗
参考正点原子窗口看门狗之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定(X由预分频器和重装载值决定,最大值为0xFFF)。喂狗的时间不能过晚为什么需要看门狗独立看门狗:在0-重载值之间任意时间都可以喂狗如果程序跑飞后又跑回正常或者跑乱的程序正好执行了刷新看门狗这样独立看门狗是不能检查到并复位芯片的窗口看门狗:限制了喂狗时间如果程序跑飞原创 2021-05-24 23:36:52 · 515 阅读 · 5 评论 -
STM32的PWM控制4个舵机
本人虽然接触STM32快半年了,但是最近才开始系统的学习STM32,建议一边学,一边做东西,能够更快的提升自己我用的定时器是TIM3,所以我会把我出现的问题,分享给大家,希望大佬多多指教!因为我先进行部分映射,但是控制某个舵机的PB4引脚却没有反应,所以百度了好久…应该注意的是PB4在单片机复位后,它是作为JTAG引脚来使用的,也就是说,要使用PB4你需要自己将其配置成普通GPIO,GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);配置成普原创 2021-05-24 21:10:27 · 6337 阅读 · 24 评论 -
STM32独立看门狗
参考正点原子视频看门狗在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称:看门狗看门狗的意义在启动正常运行的时候,系统不能复位在系统跑飞(程序异常执行)的情况,系统复位,程序重新执行独立看门狗(IWDG)由专用的低速时钟(L原创 2021-05-23 22:39:57 · 1425 阅读 · 4 评论 -
STM32外部中断
参考正点原子视频外部中断概述外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去STM32的每个IO口都可以作为外部中断输入STM32的中断控制器支持19个外部中断/事件请求:线0~15:对应外部IO口的输入中断线16:连接到PVD输出线17:连接到RTC闹钟事件线18:连接到USB唤醒事件每个外部中断线可以独立的配置触发方式(上升沿,下降沿或原创 2021-05-22 22:59:30 · 5792 阅读 · 6 评论 -
STM32串口通信基本原理
参考正点原子视频通信方式并行通信传输原理:数据各个位同时传输优点:速度快(一个引脚传输一个位)缺点:占用引脚资源多串行通信传输原理:数据按位顺序传输优点:占用引脚资源少(一个引脚都可以)缺点:速度相对较慢串行通信按照数据传送方向,分为单工:数据传输只支持数据在一个方向上传输半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发原创 2021-05-22 20:54:20 · 2685 阅读 · 13 评论 -
STM32中断优先级NVIC
参考正点原子视频为什么STM32需要中断就拿你去饭馆吃饭为例。使用中断就是饭做好了,服务员会为你端上来,然后你开始吃饭。端上来之前你爱干啥就干啥。不使用中断,你需要一次一次去问服务员饭做好了没有,这期间你没办法去做其他事情。CM3(Cortex M3)内核支持256个中断,其中包括16个内核中断和240个外部中断,并且具有256级的可编程中断设置STM32并没有使用CM3内核的全部东西,而是只用了它的一部分STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优原创 2021-05-22 00:05:16 · 3187 阅读 · 1 评论 -
STM32端口复用和重映射
参考正点原子视频端口复用STM32有很多内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用简单来说就是 咱们的板子上有很多的引脚,这些引脚本来是你作为普通的输入输出使用的(就是你自己这是这个引脚的功能),但是咱们芯片的内置外设也需要与外界进行信息交流啊啊,但是引脚就这么多(比如咱们mini板子只有51个外接引脚),如果每个内置外设都要占用引脚的话,普通的引脚就不够用了,所以这个时候伟大的人类想到原创 2021-05-21 20:54:21 · 3966 阅读 · 5 评论 -
STM32时钟系统
参考资料主要参照正点原子的视频STM32F1精英可参考4.3小节时钟系统时钟系统框图RCC的结构体定义typedef struct{ __IO uint32_t CR; // HEI,HSE,CSS,PLL等的使能和就绪标志位 __IO uint32_t CFGR; // PLL等的时钟源选择,分频系数设定 __IO uint32_t CIR; // 清除/使能时钟就绪中断 __IO uint32_t APB2RSTR; // APB2线上外设复位寄存器 __IO uint原创 2021-05-21 00:57:04 · 313 阅读 · 2 评论