Keil
- 一、使用Keil时可能会出现的问题
-
- 1.Project框不见了
- 2.添加文件时找不到
- 3.交换文件位置
- [4.main.c测试报1 warning](#4.main.c测试报1 warning)
- 5.搜索Ctrl+F
- 二、STLINK点灯操作
- 3.GPIO
- 注:
一、使用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站学习。