嵌入式学习<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结构体
	/*开启时钟*/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速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数//函数内部会自动根据结构体的参数配置相应寄存器//实现GPIOA的初始化
2.输出赋值
	/*具体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
#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));	//等待计数到0SysTick->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)了名字;

在这里插入图片描述

typedef unsigned           char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;
typedef uint32_t  u32;//兼容老版本
typedef uint16_t u16;
typedef uint8_t  u8;

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

1.开启时钟 & 初始化GPIO结构体
	/*开启时钟*/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.输入读取
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反转

//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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3029330.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

海睿思受邀参加 “走进中节能”研习交流,探索新能源数据治理的创新路径

近日,OceanMind海睿思参加由江苏省企业信息化协会(以下简称“苏信会”)主办的“走进中节能太阳能科技(镇江)有限公司”研习交流活动。 海睿思与苏美达、远东控股、隆基乐叶、固德威、上能电气等40多位来自制造业领域的…

VMware Workstation 17 Player 创建虚拟机教程

本教程是以windows server 2012物理机服务器安装好的VMware Workstation 17 Player为例进行演示,安装VMware Workstation 17 Player大家可以自行网上搜索安装。 1、新建虚拟机 双击安装好的VMvare图标,点击创建虚拟机。 2、选择是否安装系统 本步骤选…

socks5代理的工作原理是什么?

SOCKS5代理是一种采用SOCKS协议的代理服务器,是一种通用的代理服务器。SOCKS5代理服务器可以在前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器能够访问Internet网中的服务器,同时提供更加安全的通讯方式。那么&#xff0c…

解决参考文献自动生成标号,换行时自动缩进

问题如下图所示,红色方框部分应该填充内容,但自动生成标号时不会填充: 解决方案: 1. 选中内容: 2. 找到布局-段落: 3. 选择“无”,即可。

苹果电脑免费第三方软件CleanMyMac X2025电脑版垃圾清理软件神器

Mac电脑用户在长时间使用电脑之后,时常会看到“暂存盘已满”的提示,这无疑会给后续的电脑使用带来烦恼,那么苹果电脑暂存盘已满怎么清理呢,下面将给大家带来一些干货帮你更好地解决这个问题。 CleanMyMac X2024全新版下载如下: h…

开源交互审计系统:功能强大、安全好用【送源码】

在当今信息化时代,网络安全越来越受到重视。传统的远程控制工具,如RDP、SSH、VNC等,虽然方便易用,但存在安全隐患,容易被黑客利用。很多时候我们都需要做一些防护的处理来来保障网络安全。 今天了不起来分享一款开源好…

27、Qt自定义标题栏

一、说明 QtWidget及其子类有默认的标题栏,但是这个标题栏不能美化,有时候满足不了我们的使用需求,所以进行自定义标题栏 二、下载图标 在下面的链接中下载两种颜色的最大化、向下还原、最大化和关闭八个图片,并找一张当做图标…

CellChat包文献介绍

Inference and analysis of cell-cell communication using CellChat - PubMed (nih.gov) 目录 在线数据 摘要 基础介绍 分析结果 1,概述 2,识别预测通路 3,连续的信号转导 4,预测空间共定位细胞群之间的关键信号转导事件…

numpy1

注意:reshape函数的 - 1(是让电脑 自己计算的意思 import numpy as np n np.arange(0,25).reshape(5,5) m np.array([0,5,10,15,20])nn np.repeat(n,2,axis 1) m m.reshape(-1,1)nn[:,1:8:2] np.tile(m,(1,4)) nn[:,0:-1]

【计算机毕业设计】springboot果蔬种植销售一体化服务平台

伴随着我国社会的发展,人民生活质量日益提高。于是对果蔬种植销售一体化服务管理进行规范而严格是十分有必要的,所以许许多多的 信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套果蔬种植销售一体化服务平台&…

双向链表(详解)

在单链表专题中我们提到链表的分类,其中提到了带头双向循环链表,今天小编将详细讲下双向链表。 话不多说,直接上货。 1.双向链表的结构 带头双向循环链表 注意 这几的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在…

35个矩阵账号,如何通过小魔推打造2704万+视频曝光?

在如今的短视频时代,矩阵发布的作用被发挥到极致,通过各个短视频平台的流量分发,虽然视频质量不如那些头部的IP,但是在视频数量上却能做到轻松碾压,让自己的品牌与门店有更多的声量,这就是如今短视频平台对…

2024/5/9 英语每日一段

With runoff from this year’s snow and rain boosting the levels of California’s reservoirs, state water managers on Tuesday announced plans to increase deliveries of supplies from the State Water Project to 40% of full allotments, up from 30% last month. …

C++进阶 | [3] 搜索二叉树

摘要:什么是搜索二叉树,实现搜索二叉树(及递归版本) 什么是搜索二叉树 搜索二叉树/二叉排序树/二叉查找树BST(Binary Search Tree):特征——左小右大(不允许重复值)。即…

【Vue2】关于response返回数据的错误小记

关于Vue2中response返回数据的一个错误小记 如图&#xff0c;在这里返回的时候&#xff0c;后端是通过List< String >返回的&#xff0c;response接收到的实际上是一个Array数组&#xff0c;但是赋值给searchedTaskList的时候&#xff0c;需要在.then包括的范围里面赋值给…

智能创作时代:AI引领下的内容生产革命与效率提升

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【2022 深圳 ArchSummit 】大数据架构稳定性保障实践

文章目录 一、前言二、现状三、大数据架构的历史变迁&#xff08;一&#xff09;洪荒期&MR&#xff08;二&#xff09;远古期&MPP&#xff08;四&#xff09;近现代&Flink/Spark&#xff08;五&#xff09;现如今&实时数据湖架构 四、架构稳定的关键因素&#…

网络编程--tcp三次握手四次挥手

1、三次握手 &#xff08;1&#xff09;三次握手的详述 首先Client端发送连接请求报文&#xff0c;Server段接受连接后回复ACK报文&#xff0c;并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文&#xff0c;并分配资源&#xff0c;这样TCP连接就建立了。…

vue + element-plus 开发中遇到的问题

1.问题之路由守卫 初写路由守卫&#xff0c;对于next()的理解不是很透彻&#xff0c;就想着都放行&#xff0c;不然看不到效果&#xff0c;结果控制台出现了警告&#xff0c;想着报黄的问题就不是问题&#xff0c;但仔细一看发现他说&#xff0c;如果再生产阶段就会失败&#x…

AI图书推荐:使用FastAPI框架构建AI服务

《使用FastAPI构建生成式AI服务》&#xff08;Building Generative AI Services with FastAPI (Early Release) &#xff09;是一本由Ali Parandeh编写的书籍&#xff0c;计划于2025年3月首次出版&#xff0c;该书以实践为导向&#xff0c;指导读者如何开发具备丰富上下文信息的…