C
文章平均质量分 73
诺亚方包
这个作者很懒,什么都没留下…
展开
-
单片机数据接收 —— 自定义裁剪目标子串
例如在串口通信的代码中,我们通常会根据一些标志字符或者标志字符串来对母字符串进行裁剪,从而提取出我们想要的那段目标子串我现在假设主机发送给从机的数据是angle:50;,也就是传递给从机一个角度值为50 的信息然后从机需要从接收到的数据中把50 这个值提取出来并转化为整型:char *p = NULL, *pend = NULL;/* uart4_rcv_buf 是串口的接收数据端的bu...原创 2019-11-20 16:22:50 · 307 阅读 · 0 评论 -
RT-Thread 内核学习 >> (四)跑马灯线程实例
线程状态切换在系统运行时,同一时间只允许有一个线程在运行从运行过程划分,RT-Thread 中的线程分为5种状态:初始状态就绪状态运行状态挂起状态关闭状态初始状态当调用rt_thread_create() 或rt_thread_init() 创建了动态线程或静态线程时,此时线程状态即处于初始状态。即刚创建完成的线程,还没有开始运行就是处于初始状态。就绪状态当创建完成的...原创 2019-04-06 10:52:42 · 969 阅读 · 0 评论 -
RT-Thread 内核学习 >> (三)线程的创建
线程的概念RT-Thread 名为实时线程RTOS在设计一个较为复杂的应用程序时,通常将一个大型任务分解成多个小任务,然后通过运行这些小任务,最终达到完成大任务的目的在RT-Thread 中,与上述小任务对应的程序实体就叫做“线程”(或任务),RT-Thread 就是一个能对这些小“线程”进行管理和调度的多“线程”操作系统线程是实现任务的载体,它是RT-Thread 中最基本的调度单位,它...原创 2019-04-06 07:41:18 · 727 阅读 · 0 评论 -
RT-Thread 内核学习 >> (二)动态内存堆的使用
简述堆栈栈(stack)由编译器自动分配释放堆(heap)一般由程序员分配和释放int a = 0; /* 全局初始化区 */char *p1; /* 全局未初始化区 */main(){ int b; /* 栈 */ char s[] = "abc"; /* 栈 */ char *p2; /* 栈 */ char *p3 = "123456"; /* 123456 在常量区...原创 2019-04-05 21:13:29 · 863 阅读 · 0 评论 -
一段简短的程序告诉你为什么要建立动态内存以及建立动态内存的好处
/* malloc example: random string generator*/#include <stdio.h> /* printf, scanf, NULL */#include <stdlib.h> /* malloc, free, rand */int main (){ int i,n; char * buffer;...原创 2019-04-05 20:25:07 · 683 阅读 · 0 评论 -
对于单片机中指针操作的进一步理解
开门见山一个地址对应一个字节的数据,没有字地址之说;指针类型的含义是指将要对该地址开始的多少多少字节进行操作,以及操作模式;当我们对一个地址进行增减操作时,其所增加或减少的数量和定义时的数据类型有关;指针类型强制转换的意思是指,我将要对该地址所开始的多少多少字节数据进行操作;######################################################...原创 2019-03-09 08:46:36 · 1231 阅读 · 1 评论 -
红外线遥控器原理及编程
红外线遥控器内部有发射不同对应红外线信号的芯片,而其接收端则是一个光感二极管,该二极管可根据遥控器发射的红外线信号进行相应的电压改变,但是是反相的。故我们只需要在单片机中配置好外部触发中断,然后将二极管连接上相应的中断管脚即可实现引脚电平触发中断。数据格式:遥控器发出的信号包括三部分:Leader Code系统识别码(共16bits,包括8bits,和反相的8bits)操作码(共16...原创 2019-03-09 07:37:22 · 5387 阅读 · 0 评论 -
STM32F429 >> 19. RTC_实时时钟(Code)
配置及读取日期和时间此工程没有读取亚秒值。若想让时钟断电后持续计时,则不要使能RTC_Config() 函数中的后备域访问。bsp_rtc.h/** ****************************************************************************** * @file bsp_rtc.h * @author Waao...原创 2019-02-20 21:48:50 · 1737 阅读 · 0 评论 -
STM32F429 >> 22. FMC_扩展外部SDRAM(Code)
本代码用型号为“IS42S16400J”的 SDRAM 芯片为 STM32 扩展内存。它的行地址宽度为 12 位,列地址宽度为 8 位,内部含有 4 个 Bank,数据线宽度为 16 位,容量大小为8MB。SDRAM 硬件连接图:SDRAM 与 STM32 相连的引脚非常多,主要是地址线和数据线。bsp_sdram.h/** ***************************...原创 2019-02-25 14:56:51 · 1677 阅读 · 0 评论 -
STM32F429 >> 19. RTC_实时时钟
简介RTC—real time clock,实时时钟,主要包含日历、闹钟和自动唤醒这三部分的功能,其中的日历功能我们使用的最多。日历包含两个 32bit 的时间寄存器,可直接输出时分秒,星期、月、日、年。功能框图1. 时钟源RTC 时钟源 —RTCCLK 可以从 LSE、LSI 和 HSE_RTC 这三者中得到。其中使用最多的是 LSE。LSE 由一个外部的 32.768KHZ(6...原创 2019-02-20 22:04:26 · 1965 阅读 · 0 评论 -
STM32F429 >> 18. 电源管理_实现低功耗(Code)
睡眠进入睡眠的方式很简单:只需要调用WFI 或WFE 命令,在睡眠模式中,内核停止,但是所有外设,包括M4 核心的外设均处于工作状态中。唤醒睡眠的方式:任一中断;唤醒事件。// Wait For Interrupt__WFI();// Wait For Event__WFE();停止进入停止的操作为:调用 PWR_EnterSTOPMode(uint32_t PWR...原创 2019-02-19 15:12:18 · 1245 阅读 · 0 评论 -
STM32F429 >> 18. 电源管理_实现低功耗
STM32 的电源简介STM32 有专门的电源管理外设监控电源并管理设备的运行模式,确保系统正常运行,并尽量降低器件的功耗。电源监视器: STM32 芯片主要通过引脚 VDD 从外部获取电源,在它的内部具有电源监控器用于检测 VDD 的电压,以实现复位功能及掉电紧急处理功能,保证系统可靠地运行。1. 上电复位与掉电复位(POR 与PDR)当检测到 VDD 的电压低于阈值 VPOR 及 VP...原创 2019-02-19 11:41:37 · 4283 阅读 · 0 评论 -
RT-Thread 操作系统线程创建过程详解
在RT-Thread 操作系统的线程当中,一共有两种,一是静态线程,二是动态线程接下来通过RT-Thread 源码来讲解线程是如何创建的,以及这两种线程的区别:静态线程的创建首先贴出RT-Thread 有关静态线程创建的源码:/** * This function will initialize a thread, normally it's used to initialize a ...原创 2019-04-06 14:49:09 · 4029 阅读 · 0 评论 -
RT-Thread 内核学习 >> (五)线程的时间片轮询调度
优先级和时间片是线程的两个重要参数,分别描述了线程竞争处理器资源的能力和持有处理器时间长短的能力。线程优先级RT-Thread 最大支持256个优先级(数值越小,优先级越高。0为最高优先级,最低优先级预留给空闲线程)用户可以通过rt_config.h 中的RT_THREAD_PRIORITY_MAX 宏来修改最大支持的优先级;针对STM32 默认设置最大支持32个优先级;具体应用中,线程...原创 2019-04-06 11:25:55 · 1724 阅读 · 0 评论 -
RT-Thread 内核学习 >> (六)空闲线程及两个常用的钩子函数
空闲线程是一个比较特殊的系统线程,它具备最低的优先级。当系统中无其他就绪状态线程可运行时,调度器将调度到空闲线程。空闲线程还负责一些系统资源的回收以及将一些处于关闭状态的线程从线程调度列表中移除的动作。空闲线程在形式上是一个无限循环结构,且永远不被挂起。在RT-Thread 实时操作系统中空闲线程向用户提供了钩子函数,空闲线程钩子函数可以让系统在空闲的时候执行一些非紧急事务,例如系统运行指示...原创 2019-04-06 17:55:27 · 1023 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十六)内存池的使用
内存池简介之前讲的动态内存堆可以分配任意大小的内存块,非常灵活和方便。但其存在明显的缺点:分配效率不高,在每次分配时都要进行空闲内存块查找;容易产生碎片。为了提高内存分配效率,并且避免内存碎片,RT-Thread 提供了另外一种内存管理方法:内存池(Memory Pool)内存池是一种内存分配方式,用于分配大量大小相同的小内存块。使用内存池可以极大地加快内存分配与释放的速度,并且能尽...原创 2019-04-07 20:46:46 · 1428 阅读 · 2 评论 -
RT-Thread 内核学习 >> (十五)软件定时器的使用
软件定时器简介软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上(系统滴答定时器)。软件定时器使系统能够提供不受数目限制的定时器服务。RT-Thread 操作系统提供的软件定时器,以系统节拍(OS Tick)的时间长度为定时单位,提供了基于系统节拍整数倍的定时能力,即定时数值是OS Tick 的整数倍。当软件定时器所设定的定时时间到了后,会调用用户设置的定时器timeout...原创 2019-04-07 18:14:45 · 1877 阅读 · 2 评论 -
RT-Thread 内核学习 >> (十四)消息队列的使用
消息队列工作机制消息队列是RT-Thread 中另一种常用的线程间通信方式,消息队列是对邮箱的扩展。消息队列能够接收到来自线程或ISP(中断服务程序)中发出的不固定长度的消息,并把消息缓存在自己的内存空间中,而其他线程能够从消息队列中读取相应的消息并进行对应的处理。等待线程队列就是从消息链表头中获取消息。当有线程或ISP 发送消息到消息队列时,系统会从空闲链表中取到一个空闲消息框,然后将...原创 2019-04-07 17:09:25 · 1878 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十三)邮箱的使用
邮箱工作机制RT-Thread 操作系统的邮箱用于线程间通信,特点是开销比较低,效率较高。邮箱中的每一封邮件只能容纳固定的4字节内容(针对32位处理器系统,指针大小即为4个字节,所以一封邮件恰好能够容纳一个指针)。线程或ISP(中断服务程序)把一封4字节长度的邮件发送到邮箱中,而其他需要的线程可以从邮箱中接收这些邮件并进行处理。邮箱控制块struct rt_mailbox{ s...原创 2019-04-07 16:07:47 · 2942 阅读 · 2 评论 -
RT-Thread 内核学习 >> (十二)事件集的使用
线程的唤醒可根据事件的发生进行分类:特定事件唤醒线程;任意单个事件唤醒线程;多个事件同时发生唤醒线程;事件集工作机制信号量主要用于“一对一”的线程同步;当需要“一对多”、“多对一”、“多对多”的同步时,就需要事件集来处理了。RT-Thread 中的事件集用一个32位无符号整型变量来表示,变量中的一个位代表一个事件,线程通过“逻辑与”或“逻辑或”与一个或多个事件建立关联形成一个事件...原创 2019-04-07 14:55:55 · 683 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十一)线程的优先级翻转
优先级翻转使用信号量会导致的另一个潜在问题是线程优先级翻转问题。所谓线程优先级翻转,即当一个高优先级线程试图通过某种互斥IPC 对象机制访问共享资源时,如果该IPC 对象已被一低优先级的线程所持有,而这个低优先级线程在运行过程中可能又被其他一些中等优先级的线程抢占,因此造成高优先级线程被许多具有较低优先级的线程阻塞的情况。例:一开始低优先级C 占用共享资源M,当高优先级A 达到运行条件准备...原创 2019-04-07 11:19:33 · 1498 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十)互斥量的使用
什么是互斥量:厕所是共享资源,需要上厕所的人就是线程,而厕所门就起到了互斥量的作用。互斥量工作机制互斥量(互斥锁)是用于线程间互斥访问的IPC 对象,它是一种特殊的二值性信号量。当某个线程访问系统中的共享资源时,通过引入互斥量机制,可以保证其他线程无法取得对此共享资源的访问权。互斥量只有两种状态:LOCKED 和UNLOCKED,分别代表上锁和解锁两种情况。当有线程持有它时,互斥量处于上锁状...原创 2019-04-07 10:20:48 · 1038 阅读 · 2 评论 -
RT-Thread 内核学习 >> (九)生产者消费者问题
生产者消费者问题是一个经典的、多线程同步问题。有两个线程,一个生产者线程和一个消费者线程。双方共享一个初始为空、固定大小为n 的缓存区。生产者的工作是“生产”一段数据,只有缓存区没满时,生产者才能把消息放入到缓存区中,否则必须等待,如此反复;同时,只有缓存区非空时,消费者才能从中提取数据,一次消费一段数据,否则也必须等待,如此反复。问题核心是:要保证不让生产者在缓存还是满的时候...原创 2019-04-07 09:12:38 · 775 阅读 · 0 评论 -
RT-Thread 内核学习 >> (八)信号量的使用
进程间通信(IPC)在嵌入式系统中运行的代码主要包括线程和ISR(中断服务程序),在它们的运行过程中,它们的运行步骤有时需要同步(按照预定的先后次序运行),它们访问的资源有时需要互斥(一个时刻只允许一个线程访问资源),它们之间有时也要彼此交换数据。这些需求,有的是因为应用需求,有的是多线程编程模型带来的需求。操作系统必须提供相应的机制来完成这些功能,我们把这些机制统称为进(线)程间通信(Int...原创 2019-04-07 08:20:53 · 5011 阅读 · 0 评论 -
RT-Thread 内核学习 >> (七)临界区保护
临界资源临界资源是指一次仅允许一个线程访问的共享资源。它可以是一个具体的硬件设备,也可以是一个变量、一个缓冲区。不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它们进行访问。临界区每个线程中访问(操作)临界资源的那段代码称为临界区(Critical Section),我们每次只准许一个线程进入临界区。临界区保护关闭系统调度保护临界区禁止调度关闭中断禁止调度禁止调度...原创 2019-04-06 21:35:56 · 790 阅读 · 3 评论 -
STM32F429 >> 21. LTDC 液晶屏幕
显示器的参数像素像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,液晶原理中提到的一个显示单元。分辨率一些嵌入式设备的显示器常常以“行像素值 x 列像素值”表示屏幕的分辨率。如分辨率800x480 表示该显示器的每一行有 800 个像素点,每一列有 480 个像素点,也可理解为有 800 列,480行。色彩深度色彩深度指显示器的每个像素点能表示多少种颜色,一般用“位”(bi...原创 2019-02-23 22:45:55 · 7471 阅读 · 0 评论 -
STM32 >> OLED 小屏幕(Code)
我的OLED 屏幕使用I2C 通讯需要注意的是:把控好通讯的方式及时序准确性即可。oled.h/** ****************************************************************************** * @file oled.h * @author Waao * @version V1.0.0 * @d...原创 2019-02-22 19:58:57 · 2507 阅读 · 0 评论 -
STM32F429 >> 13. SPI 通讯
SPI 物理层SPI 通讯使用3 条总线及片选线,3 条总线分别是SCK、MOSI、MISO,片选线为SS,其作用分别为:SS:片选信号线,也称NSS、CS。当有多个SPI 从设备与SPI 主机相连时,设备的其他信号线 SCK、MOSI及 MISO同时并联到相同的 SPI总线上,即无论有多少个从设备,都共同只使用这 3 条总线;而每个从设备都有独立的这一条 NSS 信号线,本信号线独占主机的...原创 2019-01-20 18:08:34 · 3701 阅读 · 0 评论 -
STM32F429 >> 12. I²C 通讯(Code)
I²C 详细讲解在https://blog.csdn.net/weixin_40973138/article/details/86498401硬件I²C在此我们使用硬件I²C 通讯,即使用I²C 外设帮助我们控制数据的发送和时钟的规律跳变。若是使用模拟I²C 即是51 风格的编程,用程序手动控制两根总线的数据和时钟变化。编程指南初始化I²C GPIO引脚;初始化I²C;根据事件相应...原创 2019-01-17 21:09:54 · 490 阅读 · 0 评论 -
STM32F429 >> 10. DMA_直接存储器访问
DMA 传输实现高速数据移动过程无需任何CPU 操作控制其支持以下三种传输方式:外设到存储器传输;存储器到外设传输;存储器到存储器传输。功能框图:① 外设通道选择DMA1 请求映射:DMA2 请求映射:每个外设请求都占用一个数据流通道,相同外设请求可以占用不同数据流通道。② 仲裁器仲裁器管理数据流方法分为两个阶段。第一阶段属于软件阶段,我们在配置数据流时可以通...原创 2019-01-12 09:04:44 · 1495 阅读 · 0 评论 -
有关STM32 外设USART 的一个小问题
今天在调试USART 时,偶然发现了USART 数据寄存器状态是可以被打断的,即数据A 在发送过程中当出现了其他的数据寄存器请求B 时,该数据A 的发送会被中断,然后A 不能发送出来,而B 会被正常发送。...原创 2019-01-01 23:27:38 · 303 阅读 · 0 评论 -
STM32F429 >> 9. USART_串口通讯
串口通讯是一种设备间常用的串行通讯方式通讯协议基本分为物理层和协议层:物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体间的传输;协议层:主要规定通讯逻辑,统一收发双方的数据打包、解包标准。物理层主要分析RS-232该通讯方式中,两个通讯设备的“DB9接口” 之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准” 传输数据信号。由于RS-232...原创 2018-12-29 23:28:39 · 3718 阅读 · 0 评论 -
STM32F429 >> 2. LED_Library_Function
本文代码已上传到GitHub:https://github.com/Waao666/STM32-2.-LED_Library_Functionmain.c#include <stm32f4xx.h>#include <stm32f4xx_gpio.h>int main(void){ GPIO_InitTypeDef InitStruct; RCC->...原创 2018-12-18 12:30:02 · 240 阅读 · 0 评论 -
STM32F429 >> 8. 系统定时器
bsp_systick.c/** ****************************************************************************** * @file bsp_systick.c * @author Waao * @version V1.0.0 * @date 22-Dec-2018 * @brief ...原创 2018-12-22 23:31:47 · 591 阅读 · 0 评论 -
STM32F429 >> 7. 中断
STM32 的中断主要涉及两个部分,NVIC 和EXTINVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能;外部中断/事件控制器(EXTI)可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。EXTI 可分为两大功能:产生中断 和 产生事件当其产生中断时,其中断线路将输入信号输入到NVIC,进一步运行中断服务函数,实现功能;而当其产生事件时,则是...原创 2018-12-22 09:50:28 · 897 阅读 · 1 评论 -
STM32F429 >> 1. LED_RGB
stm32f4xx.h//外设寄存器#define PERIPH_BASE ((unsigned int)0x40000000) //总线寄存器#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)#define AHB1PERIPH_...原创 2018-12-16 22:31:36 · 927 阅读 · 0 评论 -
STM32F429 >> 6. RCC-使用HSE, HSI 配置时钟
本工程板级支持包文件适用于野火stm32f429 开发板。bsp_clk.c/** ****************************************************************************** * @file bsp_clk.c * @author Waao * @version V1.0.0 * @date 2...原创 2018-12-21 13:15:48 · 1419 阅读 · 0 评论 -
STM32F429 >> 5. 按键控制LED 开关
本工程板级支持包文件适用于野火stm32f429 开发板。本工程中涉及bsp_led.c, bsp_led.h 等文件,请前往STM32F429 &gt;&gt; 4. 使用固件库点亮LED进行查看bsp_key.c/** ****************************************************************************** * ...原创 2018-12-21 07:30:09 · 1060 阅读 · 0 评论 -
STM32F429 >> 13. SPI 通讯(code)
SPI 详细教程在这bsp_spi_flash.h/** ****************************************************************************** * @file stm32f4xx_spi.h * @author MCD Application Team * @version V1.5.1 * @...原创 2019-01-20 18:14:42 · 995 阅读 · 0 评论 -
STM32F429 >> 11. ADC 模数转换
本工程板级支持包文件适用于野火stm32f429 开发板。STM32F429IGT6 有 3 个 ADC,每个 ADC 有 12位、10 位、8 位和 6位可选,每个ADC 有 16个外部通道。另外还有两个内部 ADC 源和 V BAT 通道挂在 ADC1上。ADC具有独立模式、双重模式和三重模式。ADC 功能框图1. 电压输入范围ADC 输入范围为:V (REF-) ≤ V (I...原创 2019-01-15 14:21:16 · 5948 阅读 · 0 评论