Keil笔记(缘更)

Keil

一、使用Keil时可能会出现的问题

1.Project框不见了

view->Project Window

2.添加文件时找不到

原因:文件类型忘记选择All files

3.交换文件位置

当经常使用的文件,排在后面,不方便使用,可以用这个调整文件位置。(点击魔术棒旁边哪个三色图形)

4.main.c测试报1 warning

原因:last line of file ends without a newline。

没有如图的第10行,记得空一行。(文件最后多一个回车就行)

如果改完后没效果,需要重新打开一下main.c。

下次打开文件,还是报错,将代码对齐一下后就好了。(上图main函数整体往后了一格)

5.搜索Ctrl+F

鼠标点击要搜索的函数---》Ctrl+F

二、STLINK点灯操作

1.配置寄存器进行点灯

cpp 复制代码
#include "stm32f10x.h"                  // Device header
int main(void)
{
	//配置寄存器进行点灯(需要查手册,)
	RCC->APB2ENR=0x00000010;//打开GPIOC时钟
	GPIOC->CRH=0x00300000;//PC13口的模式
	GPIOC->ODR=0x00002000;//输出数据:全零(亮),2(灭)
	while(1)
	{
	}
}

2.使用库函数进行点灯

cpp 复制代码
#include "stm32f10x.h"                  // Device header
int main(void)
{
	//使用库函数进行点灯
	
	//1.配置外设时钟
	//可以右键-》GO To Definition...查看定义
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
	
	//2.配置端口模式
	//结构体
	GPIO_InitTypeDef CPIO_InitStructure;
	CPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//模式
	CPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//端口
	CPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
	GPIO_Init(GPIOC,&CPIO_InitStructure);
	
	//3.设置端口高低电平(二选一进行测试)
	GPIO_SetBits(GPIOC,GPIO_Pin_13);//高电平(灭)
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);//低电平(亮)
	while(1)
	{
	}
}

3.GPIO

(1)General PurPose Input Output:通用输入输出口。

(2)引脚电平:0V~3.3V。

1.LED闪烁


相关的用法:

cpp 复制代码
	//将指定端口设置为高电平
	void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
	//将指定端口设置为低电平
    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
	//根据第三个参数的值设置指定端口
    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
	//可以同时对16个端口进行写入操作
    void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

代码:

cpp 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{
	//RCC中APB2外设时钟控制函数(右键可看参数)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//引脚
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	//GPIO_SetBits(GPIOA,GPIO_Pin_0);
	//GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//LED亮
	//GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//LED灭
	while(1)
	{
		//方法2
		GPIO_ResetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
		
		//方法1.2
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);
		Delay_ms(500);
		
		//方法1
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
		Delay_ms(500);//毫秒延时函数:Delay文件中
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
		Delay_ms(500);
	}
} 

补充:

(1)复用推挽输出:由片上外设控制,高电平接VDD,低电平接VSS。

(2)复用开漏输出:由片上外设控制,高电平为高组态,低电平接VSS。

4.按键控制LED

(1)用法:

读取按键值:

cpp 复制代码
    //用来读取输入数据寄存器某一个端口的输入值(返回值代表这个端口的高低电平)
	uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
	//用来读取整个输入寄存器(唯一参数用来指定外设)
    uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
	//用来读取输出数据寄存器某一个位
    uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
	//用来读取整个输出寄存器
    uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

注:

内容来自b站STM32入门教程-江协科技,百度。

b站有视频,还有江协科技博主分享的全套资料,感兴趣可以去b站学习。

相关推荐
2501_922639581 小时前
率能半导体 SS6285L直流双向马达驱动芯片:18V/5A,覆盖电子锁、按摩仪、电动玩具、机器人四大应用场景
单片机·嵌入式硬件·硬件工程
~patience~1 小时前
WAV 逆向分析工具使用笔记
笔记
滴啦嘟啦哒1 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran1 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名1 小时前
ai应用开发的学习笔记
服务器·笔记·学习
乔旭伟2 小时前
中小厂生产管理系统选型笔记:驱动方式、主线链路与成本结构
笔记·需求分析·规格说明书
专一的咸鱼哥2 小时前
预训练 ONNX 模型转换为 .eim
嵌入式硬件·机器人
SuperByteMaster2 小时前
三极管 做开关电路 要尽快跳过放大区
嵌入式硬件
xier_ran2 小时前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
铅笔小新z2 小时前
【stm32】输入捕获-超声波测距
stm32·单片机·嵌入式硬件