C语言
Ching·
51、32...单片机、嵌入式设计 lvgl esp32 AD Guix rtos
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C语言中printf和scanf的 %*s 和 %.*s
%*s:取决于在scanf中使用还是在printf中使用。一、在scanf中使用,则添加了*的部分会被忽略,不会被参数获取。例如:int a,b;char b[10];scanf("%d%*s", &a, b);//输入为:1234abc那么1234将会读取到变量a中,但是后面的abc将在读取之后抛弃,不赋予任何变量(例如这里的字符数组b)二、在printf中使用,表示用后面的形参替代的位置,实现动态格式输出。例如:printf("%*s", 10, s)..原创 2022-05-07 16:48:05 · 2178 阅读 · 0 评论 -
AKM的AK09918调试驱动过
AKM的AK09918芯片调试原创 2022-04-15 13:33:26 · 3130 阅读 · 0 评论 -
入门三、Embedded Studio仿真观察变量
一、编译工程OK二、点击Start Execution三、运行程序四、右击要观察的变量->添加五、右侧就会显示刚刚添加的变量六、这时默认是不动态更新变量值的,需要根据自己需求选择原创 2021-05-08 13:20:15 · 1216 阅读 · 0 评论 -
入门二、Embedded Studio新建STM32 MCU 单片机工程后修改芯片型号 容量的方法
Embedded Studio新建工程后修改芯片型号 容量的方法第一次使用 Embedded Studio 编写stm32程序不注意芯片型号没有选对,找了半天终于修改成功,特此记录一下,以便给有需要的同学。使用STM32F103ZE(ROM:512K,RAM:64K)选择成了STM32F103RG(ROM:1024K,RAM:96K)一、修改第一个文件二、修改第二个文件三、需要重新编译后才生效由于我也是刚刚接触ES,写的有不妥之处敬请见谅!!!!...原创 2021-05-07 23:17:26 · 1177 阅读 · 2 评论 -
STM32学习笔记-Flash做为存储器储存数据
说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然, FLASH还可以用来装数据。 自己收集了一些资料,现将这些资料总结了一下,不想看的可以直接调到后面看怎么操作就可以了。FLASH分类 根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。转载 2016-10-22 10:32:29 · 2381 阅读 · 1 评论 -
STM32移植STemWin后使用四点或两点触摸校准(电阻屏校准,电容屏无需校准)
这是校准.c文件/*文件说明:1.屏幕校准程序的扫描要用一个定时器中断来扫描2.校准后可以直接是调用TOUCH_Scan()即可,GUI_TOUCH_X_MeasureX();,GUI_TOUCH_X_MeasureY();可以不用,同时LCDConf_FlexColor_Template.c中的LCD_X_Config();函数中的两个GUI_TOUC原创 2017-08-21 17:29:36 · 7210 阅读 · 0 评论 -
STM32F407外扩SRAM配置
以下SRAM的程序是在清时代STM32F407开发板上测试通过淘宝连接:https://item.taobao.com/item.htm?id=557618550100bsp_SRAM.c文件#include "sram.h" #include "usart.h" ////////////////////////////////////原创 2017-08-25 14:40:51 · 12536 阅读 · 0 评论 -
任意大小汉字点阵字库(字模)的制作与生成 单片机GUI/STemwin
1、首先介绍一下汉字点阵在汉字库中的地址计算公式 :汉字库种类繁多,但都是按照区位的顺序排列的。前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。 计算公式为: (94*(区号-1)+位号-1) * 一个汉字字模占用字节数 对于16点阵的字库,1个汉字字模占用32字节。对于12点阵字库,字摸每行的位数均补齐为8的整数倍,于是实际该字库的位原创 2017-09-22 08:43:14 · 13227 阅读 · 0 评论 -
C语言条件编译详解
假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出不同的平台。Windows 有专有的宏_WIN32,Linux 有专有的宏__linux__,以现有的知识,我们很容易就想到了 if else,请看下面的代码:#i转载 2016-10-25 09:22:15 · 383 阅读 · 0 评论 -
STM32的通用定时器的配置
STM32的通用定时器为:TIM2、TIM3、TIM4和TIM5在使用通用定时器时利用库函数直接设置定时器如下:1. 使能定时器TIM_X的时钟:(X=2、3、4、5) RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIMX,ENABLE);2. 计算要定时的时间,根据定时时间来设定分频数和最大计数值(以向上计数为例子转载 2016-10-10 08:27:02 · 1844 阅读 · 0 评论 -
STM32中断优先级彻底讲解
一:综述 STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。 二:优先级判断 STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副转载 2016-10-09 10:41:22 · 1598 阅读 · 1 评论 -
STM32一定时器产生不同频率的PWM
平时记性实在太差,调试完的程序,过两天又忘了,往往需要一阵子才能想起来,有时以前的资料找不到了,更是恼火,不得不重复到网上搜索。刚刚调试成功了一个类型的程序,立刻记下来,呵呵,不要又忘记了。 STM32产生PWM是非常的方便的,要需要简单的设置定时器,即刻产生!当然,简单的设置对于新手来产,也是麻烦的,主要包括:(1)使能定时器时钟:RCC_APB1PeriphClo转载 2016-10-08 15:16:50 · 13230 阅读 · 1 评论 -
STM32 定时器用于外部脉冲计数
因为用stm32f103c8作主控制器,来控制小车,小车的转速由两路光电编码盘输入(左右各一路).因此想到外部时钟触发模式(TIM——ETRClockMode2Config)。 可以试好好久,发现TIM1不能计数,到网上查了很久,也没有找到相关的文章,开始怀疑TIM1是不是需要特殊设置。经过很久的纠结,终于找到了问题——其实是我自己在GPIO设置的时候,后面的不小心覆盖了前面的了。转载 2016-10-08 15:14:39 · 25439 阅读 · 5 评论 -
STM32——USB详细使用说明 附件HID的双向通信(一)
说明:使用的是STM32F103ZET6硬件原理图在开始枚举设备的一些初始化void bsp_USBInit(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_USB_PULL_UP, ENABLE);转载 2016-10-26 11:19:30 · 19160 阅读 · 3 评论 -
USB——入门基础知识
相关名词:主机(Host)设备(Device)接口(Interface)管道(Pipe)管道是主机与设备端点数据传输的连接通道,代表了主机的数据缓冲区与设备端点之间交换数据的能力。管道包括数据流管道和消息管道。Such associations between the host software and a USB device endpoint are转载 2016-10-26 11:21:11 · 5442 阅读 · 0 评论 -
STM32单片机以太网模块ENC28J60稳定 驱动程序SPI接口方便移植lwip或者uip
ENC28J60以太网模块直插NRF24L01接口直接进行远程固件升级STM32。同时采用了1Kmode协议,可以稳定升级。ENC28J60以太网模块连接:https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.52fe880dk5tkJu&id=562594407995可以完美兼容正点原子开发板,即插即用,还送AD原创 2017-12-08 09:55:07 · 4941 阅读 · 0 评论 -
C语言带参数宏定义
C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这点和函数有些类似。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为:#define 宏名(形参列表) 字符串在字符串中含有各个形参。带参宏调用的一般形式为:宏名(实参列表);例如:#define M(y) y*y+3*y //转载 2016-10-25 09:21:06 · 1457 阅读 · 1 评论 -
C语言宏定义
宏定义是预处理命令的一种,它允许用一个标识符来表示一个字符串。先看一个例子:#include #define N 100int main(){ int sum = 20 + N; printf("%d\n", sum); return 0;}运行结果:120该示例中的语句int sum = 20 + N;,N被100代替了。#def转载 2016-10-25 09:20:16 · 443 阅读 · 0 评论 -
C语言共用体(Union)
通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:union 共用体名{ 成员列表};共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间转载 2016-10-25 08:59:10 · 1008 阅读 · 0 评论 -
C语言枚举类型(Enum)
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。以每周七天为例,我们可以使用#define命令来给每天指定一个名字:#include #define Mon 1#define Tues 2#define Wed 3#define Thurs 4#转载 2016-10-25 09:00:51 · 634 阅读 · 0 评论 -
C语言结构体和指针
指针也可以指向一个结构体,定义的形式一般为:struct 结构体名 *变量名;下面是一个定义结构体指针的实例:struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩} stu1 = { "Tom", 12转载 2016-10-25 09:01:48 · 471 阅读 · 0 评论 -
C语言结构体数组
所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。定义结构体数组和定义结构体变量的方式类似,请看下面的例子:struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group;转载 2016-10-25 09:02:51 · 796 阅读 · 0 评论 -
1分钟彻底理解C语言指针的概念
计算机中所有的数据都必须放在内存中,不同类型的数据占用的字节数不一样,例如 int 占用4个字节,char 占用1个字节。为了正确地访问这些数据,必须为每个字节都编上号码,就像门牌号、身份证号一样,每个字节的编号是唯一的,根据编号可以准确地找到某个字节。下图是 4G 内存中每个字节的编号(以十六进制表示):我们将内存中字节的编号称为地址(Address)或指针(Pointer)转载 2016-10-25 09:05:11 · 585 阅读 · 0 评论 -
C语言指针变量的运算
指针变量保存的是地址,本质上是一个整数,可以进行部分运算,例如加法、减法、比较等,请看下面的代码:#include int main(){ int a = 10, *pa = &a, *paa = &a; double b = 99.9, *pb = &b; char c = '@', *pc = &c; //最初的值 printf("&a转载 2016-10-25 09:07:37 · 652 阅读 · 0 评论 -
C语言数组指针(指向数组的指针)
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以int arr[] = { 99, 15, 100, 888, 252 };为例,该数组在内存中的分布如下图所示:定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们转载 2016-10-25 09:08:47 · 3377 阅读 · 1 评论 -
C语言字符串指针(指向字符串的指针)
C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在《C语言字符数组和字符串》中已经进行了详细讲解,这里不妨再来演示一下:#include int main(){ char str[] = "http://c.biancheng.net"; int len = strlen(str), i; //直接输出字符串 printf("%s\n",转载 2016-10-25 09:09:45 · 37819 阅读 · 2 评论 -
C语言二级指针(指向指针的指针)
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:将这种关系转换为C语言转载 2016-10-25 09:10:53 · 935 阅读 · 0 评论 -
对C语言指针的总结
指针(Pointer)就是内存的地址,C语言允许用一个变量来存放指针,这种变量称为指针变量。指针变量可以存放基本类型数据的地址,也可以存放数组、函数以及其他指针变量的地址。程序在运行过程中需要的是数据和指令的地址,变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符:在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地转载 2016-10-25 09:11:36 · 2311 阅读 · 0 评论 -
C语言指针与二维数组
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例:int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };从概念上理解,a 的分布像一个矩阵:0 1 2 34 5 6 78 9 10 11但在内存中,a转载 2016-10-25 09:12:57 · 374 阅读 · 0 评论 -
用C语言指针作为函数返回值
C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个:#include #include char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen(str2)){ return str1;转载 2016-10-25 09:15:03 · 1351 阅读 · 0 评论 -
C语言指针数组(每个元素都是指针)
如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为:dataType *arrayName[length];[ ]的优先级高于*,该定义形式应该理解为:dataType *(arrayName[length]);括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *。转载 2016-10-25 09:16:56 · 7561 阅读 · 0 评论 -
C语言函数指针(指向函数的指针)
一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。函数指针的定义形式为:returnType (*pointerName)(param list);retur转载 2016-10-25 09:17:53 · 823 阅读 · 1 评论 -
C语言预处理概述以及文件包含命令
已经多次使用过#include命令。使用库函数之前,应该用#include引入对应的头文件。这种以#号开头的命令称为预处理命令。C语言源文件要经过编译、链接才能生成可执行程序:1) 编译(Compile)会将源文件(.c文件)转换为目标文件。对于VC/VS,目标文件后缀为 .obj;对于GCC,目标文件后缀为 .o。编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程转载 2016-10-25 09:19:39 · 1604 阅读 · 0 评论 -
C语言结构体(Struct)
前面的教程中我们讲解了数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:struct 结构体名{转载 2016-10-25 08:56:56 · 1808 阅读 · 0 评论
分享