学习之旅

欢迎来到烈强的寒假学习笔记

在苦闷的寒假生活中提升自己,学习stm_32单片机即快乐又痛苦,但是自动化人不能说不行,在此特别感谢孟神对我们的大力支持,不惜用假期时光来帮助我们学习,感激不尽。以下便开始我们第一次的学习之旅吧。

初始单片机

从大一开学便开始听说单片机的事情,身为电气工程及其自动化专业的同学,现在才开始学习单片机也是感到非常的忏愧,现在来谈谈我对单片机的最初认识。
单片机简单的来说就是一个微型计算机,我们通过写C语言程序进行控制,从而达到自动化控制的目的。

单片机的硬件起步

所需硬件

接下来马上开始我们单片机的第一次学习历程。
学习单片机首先便是认识单片机的基本硬件组成。

在这里插入图片描述
上面便是我使用的单片机,上面也标注出来了一些最基本的硬件:USB电源接口,LED灯,开关键,GPIO接口,电源模块,程序下载器
这里注意黄色的排针都是GPIO接口。
这里硬件并不是全部,只是一些本次实验需要用到的。

硬件的连接

在这里插入图片描述
如上图所示,便是硬件的连接方式,注意这里的电源模块的键帽可以选择5V与3V,需要与单片机上面的power supply选项对应,3V对3V,5V对5V。
这里也可以选择直接USB供电,如下图所示。在这里插入图片描述

单片机软件起步

这里我使用的软件是keil 5.25。
在这里插入图片描述
接下来我们打开第一个程序开始进行编写。
步骤如下
在这里插入图片描述
打开实验一文件
在这里插入图片描述
打开USER文件夹
在这里插入图片描述
点开该文件即可。
我们写的第一个程序是让三个灯交替闪烁,所以我们首先就要了解三个LED灯是对应的那三个IO口,阅读STM32手册我们可知,分别对应的是PE1 PE0 PB9三个IO口
在这里插入图片描述
接下来便是写程序,所有程序如下所示,下来来进行一步一步解释
代码

#include "stm32f10x.h"
#include "delay.h"

void led_init()
{	
	GPIO_InitTypeDef GPIO_Initstructure;//定义结构体
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//打开PB时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//打开PE时钟

	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;//普通推挽输出
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9;//指定针脚8
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;//设置反转速度
	GPIO_Init(GPIOB,&GPIO_Initstructure);//选择PB口
	GPIO_SetBits(GPIOB,GPIO_Pin_9);//置位PB9
	
	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_Initstructure);
	GPIO_SetBits(GPIOE,GPIO_Pin_0);	
	
	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_Initstructure);
	GPIO_SetBits(GPIOE,GPIO_Pin_1);		
}

int main(void)
{
	
	led_init();
	delay_init();
	
	while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_9);
		GPIO_SetBits(GPIOE,GPIO_Pin_0);
		GPIO_SetBits(GPIOE,GPIO_Pin_1);
		delay_ms(500);
		
		GPIO_SetBits(GPIOB,GPIO_Pin_9);
		GPIO_ResetBits(GPIOE,GPIO_Pin_0);
		GPIO_SetBits(GPIOE,GPIO_Pin_1);
		delay_ms(500);		
		
		GPIO_SetBits(GPIOB,GPIO_Pin_9);
		GPIO_SetBits(GPIOE,GPIO_Pin_0);
		GPIO_ResetBits(GPIOE,GPIO_Pin_1);
		delay_ms(500);
	}
}

在这里插入图片描述
首先便是头文件,我们这里需要对GPIO进行操作,所以必须包含 stm32f10x.h的头文件,其次是需要用到延时,所以这里也需要包含delay.h头文件
在这里插入图片描述
这里是打开PE PB的时钟 并且对PB9进行操作,下面的PE1 PE0均可以效仿这一步,需要注意对不同口子进行配置的时候需要改变的地方。
将led_init函数定义号了之后便开始写主程序
在这里插入图片描述
在主程序中我们需要先引用delay_init与led_init两个函数,以起到初始化led。
while(1) 代表我们需要单片机一直执行循环操作。
通过上面的电路图我们知道
在这里插入图片描述
led灯左边是3.3V电压,需要IO口被复位之后才能亮,这便是让灯亮的思路。

程序结构

上面已经讲解了第一次的程序,但是上面的程序看起来非常的冗长,可读性差,改进思路便是利用宏定义来解决。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点开HEREWARE文件夹,创建led.c led.h文本文件,并且需要改为UTF-8的格式,这样才能输入中文备注。
在这里插入图片描述
在这里插入图片描述

双击HAREWARE添加我们写的led.c
将led的初始化写入led.c中

#include"led.h"
#include "stm32f10x.h"


void led_init(){

	GPIO_InitTypeDef GPIO_Initstructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);

	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_Initstructure);
	GPIO_SetBits(GPIOB,GPIO_Pin_9);
	
	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_Initstructure);
	GPIO_SetBits(GPIOE,GPIO_Pin_0);	
	
	GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Initstructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOE,&GPIO_Initstructure);
	GPIO_SetBits(GPIOE,GPIO_Pin_1);		
	
}

右击进入led.h,在led.h中定义变量

#ifndef _LED_H
#define _LED_H

#include "sys.h"

#define LED0 PBout(9)
#define LED1 PEout(0)
#define LED2 PEout(1)
void led_init();
#endif

注意这里
#ifndef
#define

#endif
的格式
于是只需简便为这样便可实现功能

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"

int main(void)
{
	
	led_init();
	delay_init();
	
	while(1)
	{
		LED0 = 0;
		LED1 = 1;
		LED2 = 1;
		delay_ms(500);
		
		LED0 = 1;
		LED1 = 0;
		LED2 = 1;
		delay_ms(500);		
		
		LED0 = 1;
		LED1 = 1;
		LED2 = 0;
		delay_ms(500);
	}
}
	

以上便是第一次的流水灯实验

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AI工程师是指从事人工智能领域相关工作的专业人士。他们负责设计、开发和实施各种人工智能技术和算法,以解决现实世界中的问题。AI工程师的学习可以包括以下几个步骤: 1. 学习基础知识:AI工程师需要具备扎实的数学、统计学和计算机科学基础知识。这包括线性代数、概率论、数据结构和算法等。可以通过自学、参加在线课程或者报读相关专业学位来获得这些知识。 2. 学习机器学习和深度学习:机器学习和深度学习是AI工程师最核心的技能。学习这些技术需要了解各种机器学习算法、神经网络结构和优化方法等。可以通过学习经典的机器学习教材、参加在线课程或者参与实际项目来提升这方面的能力。 3. 掌握编程技能:AI工程师需要熟练掌握编程语言,如Python、Java或C++等。这些编程语言在人工智能领域应用广泛,可以用于数据处理、模型训练和算法实现等。建议通过编程练习、参与开源项目或者参加编程培训来提高编程能力。 4. 实践项目经验:除了理论知识,实践项目经验对于AI工程师的成长也非常重要。可以通过参与竞赛、实习或者自己构建项目来积累实践经验。这样可以更好地理解和应用所学知识,并展示自己的能力。 5. 持续学习和跟进最新技术:人工智能领域发展迅速,新的技术和算法不断涌现。作为AI工程师,需要保持持续学习的态度,跟进最新的研究成果和技术进展。可以通过阅读论文、参加学术会议或者参与在线社区来不断更新自己的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值