嵌入式学习<1>:建立工程、GPIO和keil仿真

嵌入式学习_part1

本部分笔记用于学习记录,笔记源头 >>b站江科大_STM32入门教程_新建工程

建立工程、GPIO

**开发环境:**keil MDK、STM32F103C8T6

1 )建立工程

(1)基于寄存器开发、基于标准库 或者 基于HAL库开发;

(2)下载ST公司的标准库文件; ST外设标准库下载链接

1.添加 start 文件

1.1 添加文件
复制代码
内核寄存器配置信息:core_cm3.c / core_cm3.h
外设寄存器配置信息:startup_stm32f10x_md.s (启动文件)
 				stm32f10x.h(外设寄存器配置文件)
                system_stm32f10x.h / system_stm32f10x.c (时钟配置文件)
1.2 添加文件路径


1.3 设置字体大小(color & font)


1.4 其他设置


2.添加 library 文件


3.添加 User 文件

复制代码
main文件:主逻辑实现
stm32f10x_conf.h:库函数的头文件包含关系
stm32f10x_it.c / stm32f10x_it.h :中断处理函数...ST公司给提供的接口

stm32f10x.h 中有个选择编译 :

4.启动文件.S的选择

5.新建工程的步骤总结

6.框架

2 )GPIO

b站江科大_STM32入门教程_GPIO

1.GPIO的功能

复制代码
配置:8种输入输出模式
引脚电平:0~3.3v, 部分容忍5v(FT:数据手册里面的引脚定义)
时钟:APB2总线
引脚:0~15
复制代码
用途:1.普通IO口;
     2.复用功能:ADC、EXIT、TIM、PWM、USART等协议;

2.GPIO的基本结构

复制代码
保护二极管:0~3.3v,超过这个区间,电流流过二极管,不过电路;
输入部分:1.VDD上拉电阻(高阻态),弱上拉;
        2.VSS下拉电阻(高阻态),强下拉;
       3.施密特触发器,高低两个阈值,大于高阈值为"1",低于低阈值为"0",高低阈值中间的无变化;
       4.模拟输入,ADC ; 复用功能输入,USART_RX / EXIT;
       5.输入数据寄存器,高16位"保存",只用低16位;
输出部分: 1.输出数据寄存器,高16位"保存",只用低16位;
		 2.复用功能输出,TIM / PWM / USART_TX;
		 3.推免模式,P_MOS开,N_MOS开,高/低电平都具有驱动能力;
		 4.开漏模式,P_MOS关,N_MOS开,高电平呈现高阻态, 低电平具有驱动能力;

3.GPIO的8种模式

3)GPIO的代码实现

1.keilkill

处理中间文件,当你将代码发送给别人时,缩小文件大小

2.GPIO作为输出(推挽 / 开漏)

1.开启时钟 & 初始化GPIO结构体
c 复制代码
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引脚,赋值为第0号引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOA的初始化
2.输出赋值
c 复制代码
	/*具体IO口引脚的赋值*/
	GPIO_ResetBits(GPIOA, GPIO_Pin_0);// 输出"0"
	GPIO_SetBits(GPIOA, GPIO_Pin_0);// 输出"1"
	GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);// 输出"0"
	GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);// 输出"1"
	
	/*GPIOx_0~15同时赋值*/
	GPIO_Write(GPIOA, 0x01);//操作的GPIOx->ODR = PortVal;
3.延时函数
复制代码
放在System -> Delay.c/ Delay.h
c 复制代码
#include "stm32f10x.h"

/**
  * @brief  微秒级延时
  * @param  xus 延时时长,范围:0~233015
  * @retval 无
  */
void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;				//设置定时器重装值
	SysTick->VAL = 0x00;					//清空当前计数值
	SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
/**
  * @brief  秒级延时
  * @param  xs 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 

3.C语言的数据类型

复制代码
单片中通常存放整数,而不是 char 字符型,所以c语言和ST重新定义(typedef)了名字;
c 复制代码
typedef unsigned           char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;
c 复制代码
typedef uint32_t  u32;//兼容老版本
typedef uint16_t u16;
typedef uint8_t  u8;

4.GPIO作为输入(上拉 / 下拉 / 浮空 / 模拟)

1.开启时钟 & 初始化GPIO结构体
c 复制代码
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);		//开启GPIOB的时钟
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);						//将PB1和PB11引脚初始化为上拉输入
2.输入读取
c 复制代码
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);

5.GPIO反转

c 复制代码
//GPIO反转,用于点灯
void GPIO_Toggle(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
    /* Check the parameters */
    assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
    assert_param(IS_GPIO_PIN(GPIO_Pin));
	
    GPIOx->ODR ^= GPIO_Pin;
}

4)keil仿真

keil仿真之示波器的使用

1.Debug的设置

复制代码
SARMCM3.DLL
DARMSTM.DLL
TARMSTM.DLL
-pSTM32F103C8

2.setup设置,仿真输出的引脚

复制代码
GPIOB_IDR.11

3.RUN

相关推荐
知识分享小能手2 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao5 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾5 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT6 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa6 小时前
HTML和CSS学习
前端·css·学习·html
点灯小铭6 小时前
基于STM32单片机的智能粮仓温湿度检测蓝牙手机APP设计
stm32·单片机·智能手机·毕业设计·课程设计
看海天一色听风起雨落7 小时前
Python学习之装饰器
开发语言·python·学习
生擒小朵拉7 小时前
STM32添加库函数
java·javascript·stm32
云伴枫轻舞7 小时前
我对 OTA 的理解随记,附GD32/STM32例程
stm32·单片机·嵌入式硬件
speop8 小时前
llm的一点学习笔记
笔记·学习