随笔分类 - STM32F207教程
STM32F207教程
摘要:
1、引言 说到预编译,大家立刻就能想到#define、#if、#ifdef和#ifndef等熟悉的预编译命令。其实#include,我们通常放在源文件用来包含头文件,它也是预编译命令。当然这不是这篇文章的重点。 这篇文章主要讲解下#error预编译命令,对于什么是预编译,预编译的作用等基础知识点不再
阅读全文

摘要:
1、引言 先聊聊分享这篇文章的原因,在使用STM32时,我发现对于GPIO输出操作,可以使用GPIOx_ODR寄存器,也可以使用GPIOx_BSRR寄存器。 对应的标准外设库API接口有 void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t PortV
阅读全文

摘要:1、概念 所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据。此处的“表”通常为数组,但可视为数据库的一种体现。根据字典中的部首检字表查找读音未知的汉字就是典型的表驱动法,即以每个字的字形为依据,计算出一个索引值,并映射到对应的页数。相比一页一页地顺序翻字典查
阅读全文
摘要:1、简介 这里先介绍下软件定时器和硬件定时器的区别 硬件定时器: CPU内部自带的定时器模块,通过初始化、配置可以实现定时,定时时间到以后就会执行相应的定时器中断处理函数。硬件定时器一般都带有其它功能,比如PWM输出、输入捕获等等功能。但是缺点是硬件定时器数量少!! 软件定时器: 软件定时器允许设置
阅读全文
摘要:1、前言 直接看代码 uint32_t Time_Interval() { static uint32_t old_time_tick; uint32_t data; data = sys_time_tick_ms - old_time_tick; old_time_tick = sys_time_
阅读全文
摘要:1、引言 最近在查一个bug,查到最后发现是数组越界导致的。数组只有30个字节,代码却向这个数组填充了35个数据,这个bug还是偶现的,查到它确实废了一番功夫。我就突然想到:C语言为什么不检查数组下标呢???先来个demo验证下 #include<stdio.h> #include<stdlib.h
阅读全文
摘要:1、回调函数 关于回调函数,在之前的文章《回调函数》已经详解讲解过了,这个文章不再讲解,不太懂的同学请看之前的文章《回调函数》。在之前讲解回调函数中就使用串口作为示例,使用回调函数可以方便封装通讯库,芯片/模块厂家的SDK和部分开源库经常这样做,这样可以实现模块间的解耦,模块化编程。 这篇文章主要讲
阅读全文
摘要:1、函数指针 学习回调函数,其实就是函数指针的应用,关于函数指针在之前的文章《指针与函数》中有详细的讲解,这里不再展开详解,重新贴一下之前文章中函数指针的示例代码 #include <stdio.h> void MyFun1(int x); void MyFun2(int x); void MyFu
阅读全文
摘要:1、指针函数 指针函数,从名字上看它本质上是一个函数。指针函数:返回值类型是指针的函数。函数声明如下: int *plusfunction(int a,int b); 当然也可以写成如下格式: int* plusfunction(int a,int b); 让指针标志 * 与int紧贴在一起,而与函
阅读全文
摘要:1、定义 指针:C语言中某种数据类型的数据存储的内存地址,例如:指向各种整型的指针或者指向某个结构体的指针。 数组:若干个相同C语言数据类型的元素在连续内存中储存的一种形态。 数组在编译时就已经被确定下来,而指针直到运行时才能被真正的确定到底指向何方。所以数组的这些身份(内存)一旦确定下来就不能轻易
阅读全文
摘要:1、前言 首先说明的是vscode是代码编辑器,并不是编译器,它本身并不能编译C语言。 在这里我们使用的是MinGW-w64作为C语言的编译器。MinGW-w64的前身是MinGW的全称是:Minimalist GNU on Windows。它实际上是将经典的开源 C语言 编译器 GCC 移植到了
阅读全文
摘要:01、简述 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。 如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄
阅读全文
摘要:C语言中staic关键字很简单,简单到你的任何一个项目中可以不写一个staic关键字也是没有问题的。写这篇章主要是一下自己的staic的理解和应用,当然在章开头依旧要照本宣科简述一下static关键字。 1、简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声
阅读全文
摘要:const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程序上可以提高程序的健壮性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解别人的程序有所帮助。 1、const简介 下面简单描述一下const,基本都是教科书的知识。const修饰的变量,其值存放在只读
阅读全文
摘要:1、联合体 之前的文章《枚举和结构体的结合》文中提到,结构体就像是打包封装,把一些有共同特征的变量封装在内部。结构体是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做联合体(Union)(有些地方也叫做共用体)。 联合体举例如下 union
阅读全文
摘要:1、起因 在上篇文章《STM32编程中枚举和结构体的结合》中,有读者对下列代码有疑问 typedef struct{ char *name; //姓名 int num; //学号 int age; //年龄 float score; //成绩 }stuff_s; stuff_s xiaoming;
阅读全文
摘要:01、结构体定义 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。 结构体的定义: 第一种:只有结构体定义 struct stuff{ char *name; //姓名 int num
阅读全文
摘要:01、前言 不说废话,先上示例代码 uint8_t num_byte[4]; uint32_t num_word; const uint32_t num_word_const = 0x1234; uint32_t *point_heap; int main(void) { uint8_t num_b
阅读全文
摘要:01、ANSI C 在ANSI C中数据类型包括:整形,浮点型,指针和聚合型(如数组和结构等) 整形: 字符,短整型,整型和长整型,他们都分别有有符号(singed)和无符号(unsingned) 取值范围: 没有带signed或者unsigned,默认signed 长整型至少应该和整型一
阅读全文
摘要:对于程序员来说,debug的时间往往比写程序的时间还要长。尤其对我这种专写bug为主的程序员来说,正确使用断点调试是提高效率的有效方法。今天我们聊聊如何高效率的断点调试,由于工作中IAR为主力IDE,本篇文章主要以IAR为主。 01、普通断点 打开IDE,如下图,我们想在程序运行到第104行时停止运
阅读全文