<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Brave_Runer的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Brave_Runer</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Brave_Runer]]></copyright><item><title><![CDATA[【Zigbee】任务初始化函数（部分）和系统开始函数（部分）]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/111939058</link><guid>https://blog.csdn.net/Brave_Runer/article/details/111939058</guid><author>Brave_Runer</author><pubDate>Tue, 29 Dec 2020 23:14:12 +0800</pubDate><description><![CDATA[/* 任务事件处理函数数组 */
const pTaskEventHandlerFn tasksArr[] = {
  macEventLoop,
  nwk_event_loop,
  Hal_ProcessEvent,
#if defined( MT_TASK )
  MT_ProcessEvent,
#endif
  APS_event_loop,
#if defined ( ZIGBEE_FRAGMENTATION )
  APSF_ProcessEvent,
#endif
  ZDApp_even]]></description><category></category></item><item><title><![CDATA[Zigbee五种通信方式]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/111239616</link><guid>https://blog.csdn.net/Brave_Runer/article/details/111239616</guid><author>Brave_Runer</author><pubDate>Tue, 15 Dec 2020 23:36:26 +0800</pubDate><description><![CDATA[Zigbee共有五种通信方式，包括单播、广播、组播，根据MAC地址通信、绑定。
相关术语
Zigbee术语

一个设备有多个端点，一个端点对应一个应用，一个应用有多个属性和命令，相关的属性和命令归到一起形成簇，一个设备的这些应用一般属于同一类应用子集规范。
相关代码分析
xxApp.h文件中相关宏定义
#define TestApp_ENDPOINT           10 //端点号为10

#define TestApp_PROFID             0x0F04 //应用规范为0x0F04
]]></description><category></category></item><item><title><![CDATA[Zigbee术语]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/110252833</link><guid>https://blog.csdn.net/Brave_Runer/article/details/110252833</guid><author>Brave_Runer</author><pubDate>Sat, 28 Nov 2020 01:01:49 +0800</pubDate><description><![CDATA[彻底明白Zigbee术语——群集(Cluster)、端点(EndPoint)等
关于zigbee中的端点与簇
ZigBee协议中的规范（Profile）和簇（Cluester）的概念

]]></description><category></category></item><item><title><![CDATA[Zigbee读取DHT11传感器的温湿度，并通过串口发送给上位机]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/109210604</link><guid>https://blog.csdn.net/Brave_Runer/article/details/109210604</guid><author>Brave_Runer</author><pubDate>Wed, 21 Oct 2020 22:31:24 +0800</pubDate><description><![CDATA[下面的代码以详细注释DHT11的通信过程，想了解更多可看其数据手册
#include &lt;iocc2530.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

#define DATA_PIN  P0_0   // DHT11 的数据引脚

typedef unsigned char uchar;

/* 定义一个结构体，用来存储DHT11传出来的40位数据 */
typedef struct{
  uchar temp_H;
  ucha]]></description><category></category></item><item><title><![CDATA[va_list 详解]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108313309</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108313309</guid><author>Brave_Runer</author><pubDate>Sun, 30 Aug 2020 23:59:33 +0800</pubDate><description><![CDATA[C 标准库 - &lt;stdarg.h&gt;
C 库函数 - vsprintf()
va_list 详解

]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】I2C 读写 EEPROM 实验]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108235208</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108235208</guid><author>Brave_Runer</author><pubDate>Thu, 27 Aug 2020 09:06:17 +0800</pubDate><description><![CDATA[【STM32学习笔记】目录
I2C 初始化结构体详解
 /* I2C 初始化结构体 */
 
 typedef struct {
 uint32_t I2C_ClockSpeed;           // 设置SCL 时钟频率，此值要低于400000
 uint16_t I2C_Mode;                 // 指定工作模式，可选 I2C 模式及 SMBUS 模式 
 uint16_t I2C_DutyCycle;            // 指定时钟占空比，可选 low/high = 2]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】目录]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108234707</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108234707</guid><author>Brave_Runer</author><pubDate>Wed, 26 Aug 2020 10:25:28 +0800</pubDate><description><![CDATA[本专栏参考资料：

《零死角玩转STM32》 — 基于野火F103[霸道_V2]开发板
哔哩哔哩 “野火” 教学视频
《STM32F10xxx参考手册》
《STM32F103xC 、STM32F103xD 、STM32F103xE 数据手册》
《野火_F103霸道_原理图_V2.0》
《STM32F10xxx Cortex-M3编程手册》

目录
1、固件库的学习及使用固件库编写工程模板
2、时钟的配置
3、外部中断 / 事件
4、GPIO外部中断代码 - 编写步骤
5、SysTick-系统定时器的学习及延]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】I2C 简介及其架构]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108230765</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108230765</guid><author>Brave_Runer</author><pubDate>Wed, 26 Aug 2020 10:14:01 +0800</pubDate><description><![CDATA[I2C协议简介
协议 （计算机学科概念）
对于通讯协议，我们以分层的方式来理解，分为物理层和协议层。
简单来说物理层规定我们用嘴巴还是用肢体来交流，协议层则规定我们用中文还是英文来交流。
物理层
规定通讯系统中具有机械、电子功能部分的特性，确保原始数据在物理媒体的传输。（硬件）
I2C 通讯设备之间的常用连接方式

物理层特点：

I2C的物理层就是一个总线，多个设备共用的数据线和时钟线。在一个I2C 通讯总线中，可连接多个I2C 通讯设备，支持多个通讯主机及多个通讯从机。
其中的数据线（SCL）是一个双向]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】DMA学习及其编程实验]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108186168</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108186168</guid><author>Brave_Runer</author><pubDate>Mon, 24 Aug 2020 10:52:38 +0800</pubDate><description><![CDATA[DMA 简介

DMA(Direct Memory Access) —— 直接存储器存取，是单片机的一个外设，它的主要功能是用来搬数据，但是不需要占用CPU，即在传输数据的时候，CPU 可以干其他的事情。
数据传输支持从外设到存储器或者存储器到存储器，这里的存储器可以是SRAM 或者是FLASH。
DMA 控制器包含了DMA1 和DMA2，其中DMA1 有7 个通道，DMA2 有5 个通道，这里的通道可以理解为传输数据的一种管道。注意：DMA2 只存在于大容量的单片机中。

功能描述
DMA控制器和Cort]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】串口通讯 — USART / UART]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108141262</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108141262</guid><author>Brave_Runer</author><pubDate>Sun, 23 Aug 2020 00:15:00 +0800</pubDate><description><![CDATA[文章目录通讯的基本概念串口通讯协议简介物理层RS-232标准USB转串口原生的串口到串口TTL和232的区别协议层STM32—USART / UART简介USART 功能框图功能引脚数据寄存器控制寄存器发送
通讯的基本概念
- 串行通讯和并行通讯




特性
串行通讯
并行通讯




通讯距离
较远
较近


抗干扰能力
较强
较弱


传输速率
较慢
较高


成本
较低
较高


- 全双工、半双工及单工通讯




通讯方式
说明




全双工
在同一时刻，两个设备之间可以同时收发数据


半双]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】SysTick-系统定时器的学习及延时函数的编写]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108032927</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108032927</guid><author>Brave_Runer</author><pubDate>Sun, 16 Aug 2020 11:16:59 +0800</pubDate><description><![CDATA[SysTick 简介
SysTick—系统定时器是属于CM3 内核中的一个外设，内嵌在NVIC 中。系统定时器是一个24bit 的向下递减的计数器，计数器每计数一次的时间为1/SYSCLK，一般我们设置系统时钟SYSCLK 等于72M。当重装载数值寄存器的值递减到0 的时候，系统定时器就产生一次中断，以此循环往复。
SysTick 寄存器介绍
SysTick—系统定时器有4 个寄存器。
1、CTRL SysTick 控制及状态寄存器
该寄存器中有四个位有效，分别是：
第16位： COUNTFLAG，Syst]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】GPIO外部中断代码 - 编写步骤]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/108006388</link><guid>https://blog.csdn.net/Brave_Runer/article/details/108006388</guid><author>Brave_Runer</author><pubDate>Fri, 14 Aug 2020 16:36:03 +0800</pubDate><description><![CDATA[一、初始化要连接到EXTI的GPIO
1、建立一个GPIO结构体变量
2、打开相关GPIO口的时钟
3、配置GPIO结构体中的成员变量
4、初始化结构体
#define KEY1_INT_GPIO_PIN      		 GPIO_Pin_0
#define KEY1_INT_GPIO_PORT    		 GPIOA
#define KEY1_INT_GPIO_CLK      		 RCC_APB2Periph_GPIOA

GPIO_InitTypeDef GPIO_InitStruct;

/* 初]]></description><category></category></item><item><title><![CDATA[keil mdk中文乱码，两种解决方法，字体不再难看！]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/107967342</link><guid>https://blog.csdn.net/Brave_Runer/article/details/107967342</guid><author>Brave_Runer</author><pubDate>Wed, 12 Aug 2020 21:35:53 +0800</pubDate><description><![CDATA[【mdk中文乱码，新的完美解决方法！字体不再难看！】
Keil中的中文字体乱码解决方法

]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】外部中断/事件]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/107938324</link><guid>https://blog.csdn.net/Brave_Runer/article/details/107938324</guid><author>Brave_Runer</author><pubDate>Wed, 12 Aug 2020 11:42:13 +0800</pubDate><description><![CDATA[中断基础知识
异常就是中断，中断就是异常。但是习惯上称系统产生的为异常，外部产生的为中断，即系统异常和外部中断。
谈到中断，必须知道NVIC。NVIC 是嵌套向量中断控制器，控制着整个芯片中断相关的功能，它跟内核紧密耦合，是内核里面的一个外设
NVIC 结构体定义
 typedef struct {
 __IO uint32_t ISER[8];  // 中断使能寄存器
 uint32_t RESERVED0[24];
 __IO uint32_t ICER[8];  // 中断清除寄存器
 uint32_]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】固件库的学习及使用固件库编写工程模板]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/107753187</link><guid>https://blog.csdn.net/Brave_Runer/article/details/107753187</guid><author>Brave_Runer</author><pubDate>Mon, 10 Aug 2020 21:50:17 +0800</pubDate><description><![CDATA[一、配置固件库
在一个文件夹下建立如下子文件夹

]]></description><category></category></item><item><title><![CDATA[【STM32学习笔记】时钟的配置]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/107920262</link><guid>https://blog.csdn.net/Brave_Runer/article/details/107920262</guid><author>Brave_Runer</author><pubDate>Mon, 10 Aug 2020 20:08:01 +0800</pubDate><description><![CDATA[时钟树

简单总结一下：
​		PLLCLK的来源有三个，HSE、HSE/2、HSI/2，一般选 HSE = 8M
​		SYSCLK(系统时钟)的来源有三个，PLLCLK(锁相环)、HSE、HEI，一般选 PLLCLK * 9 = 72M
​		AHB总线上的时钟 HCLK = SYSCLK = 72M
​		APB1总线上的时钟 PCLK1 = HCLK/2 = 36M
​		APB2总线上的时钟 PCLK2 = HCLK = 72M
官方固件库的时钟配置（通过寄存器）
static void SetS]]></description><category></category></item><item><title><![CDATA[Keil5中C51和MDK共存的方法（以Keil5为例）]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/107721120</link><guid>https://blog.csdn.net/Brave_Runer/article/details/107721120</guid><author>Brave_Runer</author><pubDate>Fri, 31 Jul 2020 20:41:28 +0800</pubDate><description><![CDATA[Keil5中C51和MDK共存的方法（以Keil5为例）

]]></description><category></category></item><item><title><![CDATA[【无BUG解决】Windows 10 家庭版 修改C盘Users下的中文用户名]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/107588688</link><guid>https://blog.csdn.net/Brave_Runer/article/details/107588688</guid><author>Brave_Runer</author><pubDate>Sun, 26 Jul 2020 09:07:34 +0800</pubDate><description><![CDATA[我们在用到一些软件，或学习某些东西的时候，经常会被提示一些不知名的错误，很多错误都是由C盘Users下的中文用户名导致的。
网上有很多如何改用户名的文章，但是大部分都是只给出了完整步骤中的一部分，导致更改后出现各种问题，如：找不到资料、黑屏、以前安装的软件由于路径错误无法打开等。
本人也深受其害，在研究多个文章后，总结出较完整的步骤，在这里分享给大家。
一、启用Administrator账户
Win+X组合键，选择以管理员模式启动命令提示符

输入 net user administrator /activ]]></description><category></category></item><item><title><![CDATA[为什么用二进制补码所能表示的数据范围比原码多一个数据单位（为什么8位二进制的补码取值范围是-128~127）]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/106512781</link><guid>https://blog.csdn.net/Brave_Runer/article/details/106512781</guid><author>Brave_Runer</author><pubDate>Wed, 03 Jun 2020 00:23:54 +0800</pubDate><description><![CDATA[问题：

用8位二进制表示机器数[一个符号位]
原码表示的范围-127~+127
而用其补码表示则是-128 ~ +127  ----&gt; 10000000~01111111,为什么10000000就是表示-128,

回答：
因为有一位是符号位，所以后7位是数值位。
2^7=128，所以正数和负数各有127个（正数0 000 0000 ~ 0 111 1111、负数 1 000 0000），但是机器中是有0的，而且“0”有“+0”和“-0”之分。
所以：
正数是从 +0 ~ +127，刚好128个数字]]></description><category></category></item><item><title><![CDATA[【数据结构-C语言】内部排序算法]]></title><link>https://blog.csdn.net/Brave_Runer/article/details/106460159</link><guid>https://blog.csdn.net/Brave_Runer/article/details/106460159</guid><author>Brave_Runer</author><pubDate>Sun, 31 May 2020 22:55:12 +0800</pubDate><description><![CDATA[这是一些大佬整理的：
C语言八大排序算法，一文带你弄清所有
判断各种排序算法的稳定性
常用（内部）排序算法
八大排序算法
因为我对选择排序的不稳定性有点不理解，所以我找了一篇相关的博客，希望能帮助到有相同困惑的朋友
理解选择排序的不稳定性
下面是我自己整理的：
（如有错误请指正，谢谢）
数据类型
#define MAXSIZE 100 /*参加排序元素的最大个数*/
typedef int KeyType;

typedef struct{
    KeyType key; //按关键字排序
    int]]></description><category></category></item></channel></rss>