
STM32与物联网嵌入式系统
STM32与物联网嵌入式系统
SSSS的博客
Python C/C++ C# Opencv Halcon STM32
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
物联网嵌入式系统:FreeRTOS任务挂起和恢复
任务挂起和恢复要使用着些API则需要使能宏定义:INCLUDE_vTaskSuspend、INCLUDE_xTaskResumeFromISR任务挂起任务挂起:将任务控制块、堆栈保存,然后将任务停止,当任务需要开始运行的时候,则继续之前的状态开始运行,无需重新创建。任务删除:那么就是将当前的任务控制块、堆栈都释放掉,然后停止运行。如果需要再次运行则需要重新创建任务控制块等信息。void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIV原创 2020-07-25 10:13:45 · 487 阅读 · 0 评论 -
物联网嵌入式系统:FreeRTOS任务创建框架
1.动态任务创建和删除1.1任务创建#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, /*Pointer to the task entry function. */ const char * const pcName, /* A descriptive name for the task.*/ const uint16_t us原创 2020-07-19 16:40:41 · 505 阅读 · 0 评论 -
STM32单片机中断管理
中断介绍cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 stm32只有84个中断,包括16个内核中断和68个可屏蔽中断 stm32f103上只有60个可屏蔽中断,f107上才有68个中断也可以在相应的startup_stm32f10x_hd.s 中查看中断向量表查看当前芯片的中断源数。我当前看的这个一共是60个外部中断,也可以在参考手册查找Interrupt and exception vectors 有详细的对应寄存器地址。__Vectors原创 2020-07-19 15:20:24 · 2717 阅读 · 0 评论 -
STM32单片机通信-串口通信编程实例学习(1)
STM32串口编程参考官方文档串口常用的相关寄存器USART_SR 状态寄存器USART_DR数据寄存器USART_BRR波特率寄存器串口波特率配置波特率计算公式fPCLKx:串口的时钟,从手册中Memory map和Clock tree可得知,fpclkx分为:fpclk1用于AHB1中USART2、USART3、USART4、USART5 ,fpclk2 用于AHB2中USART1 Baud Rate:需要设定的波特率USARTDIV...原创 2020-07-01 00:56:28 · 4407 阅读 · 0 评论 -
STM32单片机通信-串口通信学习(0)
1.串口通信串行接口(Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,占用芯片引脚资源少,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种.原创 2020-06-29 01:11:09 · 1357 阅读 · 0 评论 -
STM32 位带操作 Bit-band operation详解
1.STM32位带区和位带别名区参考书籍《The Defi nitive Guide to the ARM Cortex-M3》Bit-band operation support allows a single load/store operation to access (read/write) to a single data bit. In the Cortex-M3, this is supported in two predefi ned memory regions called bi原创 2020-06-25 13:29:04 · 2997 阅读 · 0 评论 -
STM32单片机通信-SPI总线学习
SPI总线介绍第一:SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。第二:SPI,是一种高速的,全双工(发送和接收是独立的信号线),同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。第三:通常由一个主模块和一个或多个从模块组原创 2020-06-21 23:08:45 · 3893 阅读 · 1 评论 -
STM32单片机通信-IIC总线学习
1.IIC总线介绍第一:I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。第二:IIC是半双工通信方式,只有2根链接线,一根是双向的数据线SDA,可发送和接收数据,I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。半双工:意思一根线有收发功能叫双工,但是一根线只能在一个时刻收或者发,则就时办双工。另一根是时钟线SCL,两条线可以挂多个设备,每个设备都可以作为主机也可以作为从机,但是在同一原创 2020-06-17 01:33:41 · 1975 阅读 · 0 评论 -
STM32通用IO口原理和八种IO口模式学习
1.GPIO基本结构来自官网数据书册介绍:Each of the general-purpose I/O ports has two 32-bit configuration registers (GPIOx_CRL,GPIOx_CRH), two 32-bit data registers (GPIOx_IDR, GPIOx_ODR), a 32-bit set/resetregister (GPIOx_BSRR), a 16-bit reset register (GPIOx_BRR) an原创 2020-06-15 23:35:30 · 4851 阅读 · 0 评论 -
STM32时钟系统(2)-时钟系统常用寄存器和库函数
SMT32时钟系统常用寄存器:Clock control register (RCC_CR)Clock configuration register (RCC_CFGR)Clock interrupt register (RCC_CIR)APB2 peripheral reset register (RCC_APB2RSTR)APB1 peripheral reset register (RCC_APB1RSTR)AHB Peripheral Clock enab原创 2020-05-21 21:39:09 · 3135 阅读 · 0 评论 -
STM32时钟系统(1)-时钟框图解释
STM32时钟系统官方文档说明:Three different clock sources can be used to drive the system clock (SYSCLK):• HSI oscillator clock• HSE oscillator clock• PLL clockThe devices have the following two secondary clock sources:• 40 kHz low speed inter...原创 2020-05-20 22:38:41 · 4386 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统内存池机制学习
内存池管理动态内存堆可以任意分配大小,使用非常的灵活,但是在分配的时候都要进行空闲内存查找,这样就降低了分配效率,而且这样会导致大量的内存碎片。假如系统中的空闲内存有100M ,但是由于动态内存分配原因导致这100M内存分开存放,如:10M 50M 20M 20M 都存放在不同的位置。当程序员使用rt_malloc需要一次申请60M内存时就会无法申请,所以动态内存分配产生大量的内存碎片会导致内存可用空间浪费。RT-Thread提供了一套内存管理机制:内存池。这种机制类似与linux的内存原创 2020-05-17 21:14:37 · 598 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统定时器机制学习
定时器机制RT-Thread 向用户提供了一系列的API接口,在构建硬件定时器-系统滴答定时器的基础上。RT-Thread 提供的定时器是系统能够提供不受数目限制的定时器服务。RT-Thread 提供的定时器单位位:系统节拍(OS Tick),是一种基于OS Tick整数倍的能力,如果设置OS Tick 为10ms ,那么上层软件定时器只能提供10ms,20ms,100ms,等时间单位的定时服务。RT-Thread 定时器服务还提供了一个timerout回调函数,用户可以将需要定时运行的业务放原创 2020-05-17 20:30:41 · 706 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统消息队列学习
消息队列 简单的理解就是发送的是消息(数据),机制就是队列,先进先出原则(FIFO),是对邮箱机制的一种扩展。 消息队列能够接收来自线程或中断服务例程中不固定长度的消息,并把消息缓存在自己的内存空间中。其他线程也能够从消息队列中读取相应的消息,而当消息队列是空的时候,可以挂起读取线程。当有新的消息到达时,挂起的线程将被唤醒以接收并处理消息。消息队列是一种异步的通信方式。线程或中断服务例程可以将一条或多条消息放入消息队列中。同样,一个或多个线程也可以从消息队列中获得消息。当有多...原创 2020-05-17 18:25:55 · 949 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统邮箱消息机制学习
邮箱机制跟生活中的例子类似,就是用来发送消息的。RT-Thread 操作系统的邮箱用于线程间通信,特点是开销比较低,效率较高。邮箱中的每一封邮件只能容纳固定的 4 字节内容(针对 32 位处理系统,指针的大小即为 4 个字节,所以一封邮件恰好能够容纳一个指针)。典型的邮箱也称作交换消息,一个或多个线程可以从邮箱中接收这些邮件并进行处理。邮箱中一封邮件的最大长度是 4 字节,所以邮箱能够用于不超过 4 字节的消息传递。由于在 32 系统上 4 字节的内容恰好可以放置一个指针,因此当需要在线程间传递原创 2020-05-17 17:44:29 · 2051 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统事件集学习
事件集合: 事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对一,一对多,多对多的同步。即一个线程与多个事件的关系可设置为:其中任意一个事件唤醒线程,或几个事件都到达后才唤醒线程进行后续的处理;同样,事件也可以是多个线程同步多个事件。在RT-Thread中用一个 32 位无符号整型变量来表示,变量的每一位代表一个事件,也就是说RT-Thread默认是可以设置32个事件。操作原理线程通过 “逻辑与” 或 “逻辑或” 将一个或多个事件关联起来,形成事件组合。...原创 2020-05-17 14:48:59 · 671 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统优先级反转学习
优先级翻转:使用信号量会导致的另一个潜在问题是线程优先级翻转问题。所谓线程优先级翻转,即当一个高优先级线程试图通过某种互斥IPC 对象机制访问共享资源时,如果该IPC 对象已被一低优先级的线程所持有,而这个低优先级线程在运行过程中可能又被其他一些中等优先级的线程抢占,因此造成高优先级线程被许多具有较低优先级的线程阻塞的情况。假设三个任务准备执行,A,B,C,优先级依次是A>B>C;第一:C处于运行状态,获得CPU正在执行,同时占有了A需要的临界资源;第二:A进入就绪状态,因为优先原创 2020-05-17 14:09:31 · 1445 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统临界资源和临界区-线程同步
参考:物联网嵌入式系统:RT_Thread系统临界资源和临界区(2)-信号量linux多线程C/C++编程互斥锁和条件锁实现生产者和消费者模式参考官方文档/* * 生产者消费者例子-线程同步 * * 这个例子中将创建两个线程用于实现生产者消费者问题 *(1)生产者线程将cnt值每次加1并循环存入array数组的5个成员内; *(2)消费者线程将生产者中生产的数值打印出来,并累加求和 */#include <rtthread.h>#define THREAD_P原创 2020-05-17 12:34:22 · 1863 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统临界资源和临界区(3)-互斥量
互斥量的使用互斥量也叫互斥锁,和二值信号量的原理类似,但是不同于优先级和抢断机制:拥有互斥量的线程拥有互斥量的所有权,互斥量支持递归访问且能防止线程优先级翻转;并且互斥量只能由持有线程释放,也就是说互斥量的所有权只属于当前的线程,而信号量则可以由任何线程释放。互斥量只有两种状态LOCKED和UNLOCKED互斥量的管理数据结构/** * Mutual exclusion (mutex) structure */struct rt_mutex{ struct rt_ipc_...原创 2020-05-17 12:03:05 · 592 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统临界资源和临界区(2)-信号量
物联网嵌入式系统:RT_Thread系统临界资源和临界区(1)-禁止调度和禁止中断使用互斥特性保护临界区:信号量二值信号量 创建二值信号量,为创建的信号量对象分配内存,并把可用信号量初始化为用户自定义的个数,二值信号量的最大可用信号量个数为 1。每个信号量对象都有一个信号量值和一个线程等待队列,当信号量实例数目为零时,再申请该信号量的线程就会被挂起在该信号量的等待队列上,等待可用的信号量实例(资源) 在嵌入式操作系统中二值信号量是线程间、线程与中断间同步的重要手段。...原创 2020-05-17 11:34:58 · 517 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread系统临界资源和临界区(1)-禁止调度和禁止中断
临界资源指一次仅仅允许一个线程访问的共享资源,它可以是一个具体的硬件设备,也可以是一个变量,可以是缓冲区等,这些都称为临界资源,或者共享资源,多个任务同时运行,只能允许一个任务访问的资源。临界区每个进程中访问临界资源的那段代码称为临界区,每次只允许一个进程进入临界区,进入后,不允许其他进程进入。不论是硬件临界资源还是软件临界资源,多个进程必须互斥的对它进行访问。多个进程涉及到同一个临界资源的的临界区称为相关临界区。使用临界区时,一般不允许其运行时间过长,只要运行在临界区的线程还没有离开.原创 2020-05-17 11:23:36 · 1448 阅读 · 1 评论 -
物联网嵌入式系统:RT_Thread系统空闲线程和钩子线程学习
1.系统空闲线程:在系统种有一个比较特殊的系统线程,它具备最低的运行优先级,当系统种没有其它就绪的线程可运行时 ,调度器才会调度到空闲线程。1.1作用:收集系统的一些空闲资源等1.2特点:空闲线程在形式上是一个无限的循环执行,而且永远也不会被挂起。1.3空闲线程的创建:在系同源码种我们可以找到空闲线程的创建,其实和用户创建自定义线程方式一样,而且我们看到空闲线程的优先级总是最小的RT_THREAD_PRIORITY_MAX - 1, RT-Thread种线...原创 2020-05-12 22:50:09 · 567 阅读 · 0 评论 -
物联网嵌入式系统:RT_Thread线程的时间片和线程优先等级学习
1.介绍在多线程种有两个重要的参数:线程的时间片和线程优先等级,分别描述了线程竞争CPU资源的能力和持有CPU时间长短的能力。2.线程的时间片:约束线程单次运行时长,其一个运行时间片单位等于一个系统节拍(os_Tick)假设有 2 个优先级相同的就绪态线程 A 与 B,A 线程的时间片设置,那么当系统中不存在比 A 优先级高的就绪态线程时,系统会在 A、B 线程间来回切换执行。通过时间片轮询机制可以保证同等优先级任务能够轮流的使用CPU资源。3.线程优先等级:RT-Thread原创 2020-05-12 22:33:05 · 2557 阅读 · 1 评论 -
物联网嵌入式系统:RT_Thread线程管理学习
0.内存堆和栈的使用堆(Heap):一般由程序员分配和释放分配:rt_malloc、rt_calloc、rt_realloc释放:rt_free内存初始化:rt_memset栈(Stack):由编译器自动分配和释放局部变量、全局变量1.RT-Thread 的线程介绍RT-Thread 的线程调度器是抢占式的,主要的工作就是从就绪线程列表中查找最高优先级线程,保证最高优先级的线程能够被运行,最高优先级的任务一旦就绪,总能得到 CPU 的使用权,当一个运行着的线程使一个比它优先级高的线程原创 2020-05-11 22:48:56 · 688 阅读 · 0 评论