- 博客(28)
- 收藏
- 关注
原创 VSCode编译C++文件控制台窗口闪退
将launch.json中的"type":"cppdbg"改成"type":"cppvsdgb"
2022-02-21 22:26:27
5071
10
原创 STM32F103RCT6
在配置结构体TIM_OCInitTypeDef时,各元素如下:(1) TIM_OCMode:比较输出模式选择,总共有八种,常用的为 PWM1/PWM2。它设定 CCMRx寄存器 OCxM[2:0]位的值。 (2) TIM_OutputState:比较输出使能,决定最终的输出比较信号 OCx是否通过外部引脚输出。它设定 TIMx_CCER寄存器 CCxE/CCxNE 位的值。 (3) TIM_OutputNState:比较互补输出使能,决定 OCx的互补信号 OCxN是否通过外部引脚输出。它设定 CC
2022-02-17 15:19:53
2215
原创 STM32F103RCT6中断
这次我们尝试使用中断进行定时。具体步骤为:①能定时器时钟。RCC_APB1PeriphClockCmd();② 初始化定时器,配置ARR,PSC。TIM_TimeBaseInit();③开启定时器中断,配置NVIC。void TIM_ITConfig();NVIC_Init();④使能定时器。TIM_Cmd();⑥编写中断服务函数。TIMx_IRQHandler();首先我们设置一下TIM,结构体TIM_TimeBaseInitTypeDef中有五个元素,其中除了TIM_R.
2022-02-12 01:06:51
1574
原创 STM32F103RCT6
板载按键实验。查询引脚功能图,可以知道板载按键与引脚对应为 KEY0 --> PC5, KEY1 --> PA15,要使用按键,应当先使能对应时钟(以使用KEY0为例):#define KEY_GPIO_PIN GPIO_Pin_5#define KEY_GPIO_PORT GPIOC#define KEY_GPIO_CLK RCC_APB2Periph_GPIOCRCC_APB2PeriphClockCmd(KEY_GPIO_CLK, ENABLE);然后要设置对
2022-02-12 00:44:26
1532
1
原创 STM32F103-定时
首先我们使用tim3寄存器里来完成一个简单的定时。我们使用的定时器的初始化函数以及中断函数如下timer.c:void TIM3_Init(u16 arr,u16 psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 TIM_TimeBaseSt
2022-01-30 22:08:40
2438
原创 STM32F103
下载完官方固件库之后,我们创建一个文件夹,里面再创建几个子文件夹,用于存放需要用到的头文件和源文件,以及存放使用keil过程中产生的文件。创建好之后,我们再创建一个Project文件夹来创建一个工程。使用keil5在Project文件夹中创建这个工程,在其中配置好源文件以及头文件路径(详细参考baidu),就可以开始编写自己的程序了。我们使用官方固件库是为了使用已经编写好的函数,比如配置时钟的RCC_APB2PeriphClockCmd(),初始化GPIO口的GPIO_Init()函数等等,我们可以通过
2022-01-26 21:09:39
559
原创 STM32F103-官方固件库
上一篇中,我们完成了配置寄存器对引脚进行控制,代码如下int main(){ *(unsigned int*)0x40021018 |=(1<<4); *(unsigned int*)0x40011004 &=~(0x0F<<(4*5)); *(unsigned int*)0x40011004 |=(1<<(4*5)); *(unsigned int*)0x4001100C &=~(1<<13); while(1);}
2022-01-24 05:19:15
3010
1
原创 STM32F103-寄存器开发-2
上一篇博客中我已经配置好了对应的时钟,接下来就是对GPIOC口进行操作了。为此我们需要配置端口配置寄存器,但是在用户手册中查阅,可以发现有两个寄存器,CRL和CRH,我们应该使用哪一个呢?我们在用户手册中可以看到(以CRL为例)这里对应的是端口0~7位,也就是Pin0到Pin7,同样的CRH则是对应的Pin8~Pin15,比如我们现在要使用的是PC13引脚,那么我们就要配置对应的CRH寄存器。从表中可以知道,复位后的状态是MODE[1:0]=00, CNF[1:0]=01,其中有0有1,因此不能直.
2022-01-24 01:23:47
324
原创 STM32F103-寄存器开发配置时钟
STM32F103有三个总线,AHB、APB1和APB2,总线基地址是由APB1开始的,地址是0x40000000,通用输入输出(GPIO)挂载在总线APB2上,复位与时钟控制(RCC)挂载在AHB上,我们通过引脚的控制来使用单片机,也就是使用地址来控制该地址对应的引脚。查看用户手册时,通过偏移地址获知使用的寄存器的地址,比如下面图中的地址我们从手册上知道,RCC基地址为0x40021000,偏移了0x04,就是0x40021004。...
2022-01-21 14:55:33
1276
原创 arduino打卡
#include <DS1302.h>#include <EEPROM.h>#include <SPI.h>#include <MFRC522.h> void printHex(byte *buffer, byte bufferSize);#define SS_PIN 10#define RST_PIN 9 byte nuidPICC[4];int address = 0; ///DS1302 rtc(2, 3, 4);.
2021-12-13 13:40:15
584
原创 2021-12-12
安装搭建keil51.下载keil5MDK,这个直接度娘可安装2.在官网上找到合适的STM32版本的pack文件下载,例如Keil.STM32F1xx_DFP.2.3.0,这个可以在下载keil5后打开3.下载keil5注册机,直接度娘下载,例如我下载的KEIL_Lic,进入后按照下图便注册成功。注意这里需要以管理员身份打开keil5.以上,便完成了基本的keil5的STM32开发环境搭建。...
2021-12-12 22:29:08
186
原创 docker安装微信
1. 允许用户访问X11服务xhost +2.安装微信镜像sudo docker pull bestwu/wechat3.运行微信docker run -d --name wechat --device /dev/snd --ipc=host \-v /tmp/.X11-unix:/tmp/.X11-unix \-v $HOME/WeChatFiles:/WeChatFiles \-e DISPLAY=unix$DISPLAY \-e XMODIFIERS=@im=ibu
2021-11-16 21:17:19
1329
1
原创 常用Linux命令
cd 转到目录ls 查看文件ls -l 查看文件详细情况mkdir 创建一个目录rm 删除文件rm -rf / rmdir 删除文件夹vi 创建/打开一个文件whoami 查看自己用户名cat 查看文件内容cp file1 file2 复制文件1->文件2mv filename1 filename2 修改文件名1->文件名2gcc -o A B.c 编译C语言文件B.c并命名为Ag++ -o A B.c 编译C++文件B.c并命名为A...
2021-11-13 21:05:55
834
原创 八皇后问题
问题描述 在棋盘上放置八位皇后,每个皇后的同一行、同一列和同意对角线没有其他皇后。这里列一个简单的解决方案,有较大的改进空间#include<stdio.h>void queen(){ int i,j,k,m,n,o,l=0; char a[8][8]={' '}; //将初始的棋盘都赋成空格 a[0][0]='Q'; //指定一个初始皇后(也可不指定) for(i=0;i<8;i++){ for(j=0;j<8;j++...
2021-11-12 09:40:01
213
原创 连通问题-快速查找算法
这个程序从标准输入读取小于N的非负整数对序列(对p-q表示“把对象p连接到q”),并且输出还未连通的输入对。程序中使用数组id,每个元素表示一个对象,且具有以下性质,当且仅当p和q是连通的,id[p]和id[q]相等。为简化起见,定义N为编译时的常数。#include<stdio.h>#define N 10000int main(){ int i,p,q,t,id[N]; for(i=0;i<N;i++) id[i]=i; while(scanf("%d%d\n",
2021-11-12 09:34:26
161
原创 指针传参 数组传参2021-11-7
1.数组参数。如果我们有一个一维数组int arr[20]={0};我们想要写一个函数,而该函数的实参是该数组,我们可以用void test(int arr[20]);void test(int arr[]);void test(int *arr);作为形参。如果我们的数组是指针数组,int *arr[20];可以用void test(int *arr[20]);void test(int *arr[]);void test(int **arr);作为形参。
2021-11-07 18:54:25
809
原创 初阶指针2021-10-31
1.我们知道,在一个函数中,只能返回一个值,那么如何引用函数来改变主函数的多个值呢?在调用函数时,退出函数后会将函数中定义的变量销毁,因此无法直接在函数中定义变量以达到改变主函数多个值的目的,因此我们可以考虑在调用函数中改变主函数变量所指地址的值,即使用指针来改变主函数变量的值。设我们现在在主函数有两个整型变量a和b,值均为3,我们想要调用函数改为3的二倍和3的平方,我们要怎么实现呢。这里将调用的函数命名为change()#include<stdio.h>void change(
2021-10-31 12:20:54
89
原创 递归函数2021-10-24
1.函数的递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。例如:int f(int x){ int y,z; z=f(y); //调用f函数时又调用f函数 return(2*z);}在调用函数f的过程中调用f函数,是直接调用本函数。如果在调用f1函数的过程中调用f2函数,而在调用f2函数过程中又要调用f1函数,就是间接调用本函数。在递归函数中,我们应当设置条件,使函数不至于无止境的调用下去。2.实例:用递归方法求 n! .
2021-10-24 13:50:07
241
原创 定义一个数组2021-10-17
1.数组的定义数组的表示方式是数组名[常量表达式],定义一个数组为“类型说明符 数组名[常量表达式]”,如int a[10]表示定义了一个整型数组,数组名为a,此数组包含10个整形元素。在定义数组时,需指定数组中元素的个数,方括号中的常量表达式用来表达元素的个数,即数组长度。注意,下标是从0开始的,如a[3]中的3个元素为a[0],a[1],a[2],不存在a[3]。常量表达式中可以包括常量和符号常量,如"int a[3+5]"是合法的,不能包含变量,如"int a[n]"是不合法的。
2021-10-17 17:00:41
2564
原创 斐波那契数列2021-10-11
1.要编写一个斐波那契数列,我们需要先知道斐波那契数列的原理,即一二项均为1,之后的每一项为前两项的和。因此初步判断需要使用循环语句。2.对于斐波那契数列的基本思路,可以是先定义三个整型变量,用于进行每三位数的计算,在这里以f1,f2,f3为例。int f1=1,f2=2,f3;然后先将f1,f2输出,为了照顾到后面数字的整齐性,将其长度设置为12printf("%12d\n%12d\n", f1, f2);3.编写一个数列,可以判断使用for语句,多定义一个变量来限制循环次数,这里
2021-10-11 22:29:27
322
原创 2021-10-04 switch语句的使用
1.switch语句是分支结构语句,常用于多分支结构。2.使用switch时,应先定义一个用于判断的变量,可以是字符变量,也可以是整型变量等。将其放置于switch后的括号中进行判断switch(n){ //设n为进行判断的变量}3.在switch后的花括号中,使用case语句进行判断,格式如下:case i:表达式1;break; //i可以是数字,也可以是一个字符case j:表达式2;break;case语句判断n是否等于i,若是,则执行表达式1,然后break(跳出花
2021-10-04 21:27:43
1397
原创 从键盘上获取英文字符并转换大小写(C语言) 9.25
1.首先需要了解字母大小写的转换原理。通过ASCII表可知,小写字母的ASCII码比大写字母的ASCII码大32。例如字符'A'的ASCII码为65,"a"的ASCII码为97.因此只需要判断输入的为大写字母还是小写字母,通过增或减32达到转换大小写的目的。2.定义一个字符变量之后,我们可以通过scanf函数或getchar()从键盘上获取英文字符,代码如下(设字符变量为ch):scanf("%c",&ch);或ch=getchar();3.获取字符后,需要判断该字符为大写或
2021-09-25 21:41:52
1478
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人