下面的日志是学习江协科技教程的一个随手记录,以及自己出bug的一些补充,如果在观看视频跟随操作中出现了与笔者下面类似的一些bug,可以参考。

新建工程部分 链接到标题

支持包安装 链接到标题

定位到视频[2-1]-6:14:在这里笔者无法通过直接点击pack进行支持包安装,经所搜,发现是应为未开管理员运行程序导致无法写入,管理员方式运行安装支持包方式如下:

  • 找到安装支持包的程序:"<你的Keil5的下载位置>\Keil5 MDK\UV4\PackInstaller.exe",右键将其以管理员形式运行,
  • 然后再这里导入你想要安装的支持包(操作如下所示) alt text
  • 等待右下角的进度条到100%即安装成功,然后按照视频中的检验方法(新建工程看能否选择stm32系列包)可检测是否安装成功

修改编码方式支持中文 链接到标题

定位到视频[2-2]-12:32:按确定的时候笔者报错Access to E:\newdownloadapp\Keil5 MDK UV4\global.prop was denied,啊哈!还是因为没有管理员(这应该是因为笔者将keil安装在了一个要管理员权限才能编辑的文件夹里面的缘故),用管理员运行Keil再修改即可完成。

使用寄存器点灯 链接到标题

找参考手册(英文版p113)有对IO时钟的定义,为1代表打开时钟,因此我们给1

RCC->APB2ENR =0x00000010;

然后还要配置GPIO寄存器,相当于输出端口,首先要使得其为输出模式,并且也可以设置速度(视频) 视频中这里使用的是13号口,看p177我觉得也可以选其他,不过下面要跟着改罢了

GPIOC->CRH = 0x00300000;

然后是输出数据,如果选了13号口,那么如果对应9.2.4输出端口的13号ODR要是1,也就是输出的是高电平,由于灯是低电平亮的,所以灯灭,如果ODR选0,那么输出低电平,灯亮

GPIOC->ODR = 0x00002000;//灯灭
GPIOC->ODR = 0x00000000;//灯亮

显然,这是相当恶心的,意味着要一直查表,因此寄存器编程不是最优的写法。下面我们对比着来看看库函数有多nb。

//启用时钟
RCC->APB2ENR =0x00000010;
//配置端口
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00002000;//灯灭
//GPIOC->ODR = 0x00000000;//灯亮
//启用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//配置端口:先配置号端口的三个参数
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//配置端口:然后又是一个函数封装一句话配置端口
GPIO_Init(GPIOC,&GPIO_InitStructure);
//将指定端口设置成高电平或者低电平
//GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);

  • 虽然库函数写法看起来繁琐很多,但是说的都是人话,查库函数查到的都是已经被定义好的语言,而寄存器写法查到的只能是0、1
  • 另一方面,封装的写法也避免了不同端口之间的冲突