从零开始新建工程

一 导入工程所需的前置文件

(这里默认已经基本对嵌入式开发的相关软件有了解,当然下面也会有一点说明)

1.首先创建project文件夹

2.在keil的芯片选择中选择自己的开发芯片(这里默认STM32F103C8T6,因为本人刚开始学也是用的这款芯片)

请添加图片描述

3.新建start文件夹,将启动文件、外设寄存器描述文件(描述stm32有哪些寄存器和对应地址)、时钟配置文件放入其中

请添加图片描述
启动文件

请添加图片描述
第一个是外设寄存器描述文件,二三是时钟配置文件

4.(也在start文件)添加内核寄存器描述文件请添加图片描述

5.在keil的工程中添加配置文件

startup_stm32f10x_md.s
core_cm3.c
core_cm3.h
stm32f10x.h
system_stm32f10x.c
system_stm32f10x.h        //这些是最基本的文件,无需我们修改,是只读文件

至于为什么这么多文件只用md.s呢?这张图可以说明:

请添加图片描述

6.添加.h文件

点击keil的魔术棒按钮(就是工具栏最下面那行长得有点像榔头那个),在c/c++中找到include paths栏,在里面添加start的路径

7.新建user文件夹,在这里创建main.c文件作为我们的主函数

做完这一步可以在main中写一点代码看看能否运行成功

#include "stm32f10x.h"

int main (void)
{
    while (1)
    {
        
    }
}
//记得代码最后一定要空一行,否则会报警告

然后点击请添加图片描述
跑一下试试(过程可能有点慢)

最后只要是零错误零警告就ok了!!

二 要不试试点个灯?

1.这里使用stlink来烧录(不知道stlink是啥的也没事,可以先学着做【淘宝有的卖{我不是带货的}】)按下图接线

请添加图片描述

另外可能之前接触过烧录的同学听说过usb转ttl的烧录方式

请添加图片描述

右边就是usb转ttl的烧录模块,这里要注意,使用usb转的话是需要更改stm32f103c8t6上面的模式的(忽略我的手)

请添加图片描述

也就是上面的小绿帽的部分,调成01,但是使用stlink的话00就可以了,也就是不用管这个小绿帽(本人之前没好好学踩过坑)

连接好线之后就可以插进电脑开始下一步了

2.调试渠道

在魔术棒的debug栏中,右上角有一个use:………… Setting,选stlink调试
请添加图片描述

然后点进setting按钮,将reset and run勾选,就不用每次都去手动reset,方便一点

以上步骤结束之后点击编译按钮看看有无报错

没错就可以点击调试按钮右边的load按钮下载到stm32里面

3.点灯

#include "stm32f10x.h"

int main (void)
{
    RCC->APB2ENR = 0x00000010;
    GPIOC->CRH = 0x00300000;
    GPIOC->ODR = 0x00002000;
    while (1)
    {
        
    }
}
//关灯
#include "stm32f10x.h"

int main (void)
{
    RCC->APB2ENR = 0x00000010;
    GPIOC->CRH = 0x00300000;
    GPIOC->ODR = 0x00000000;
    while (1)
    {
        
    }
}
//开灯

记得先编译再load!!!!!

具体为什么是

RCC->APB2ENR = 0x00000010;
GPIOC->CRH = 0x00300000;
GPIOC->ODR = 0x00000000;

可以去看江科大的视频(本文也是基于这个视频的笔记)


以上的电灯方式可以看出,虽然代码很简洁,但是需要把其他端口全部置零,可能会影响到其他操作,所以这里引入库函数的操作

三 库函数操作控制开关灯

1.在工程文件夹里新建一个Library文件夹以存放库文件

2.添加标准外设驱动文件:需要全选后复制到Library中(当然.h文件也需要)

请添加图片描述

3.把Library中的文件添加到keil的项目中

4.还需添加

stm32f10x_conf.h
stm32f10x_it.c
stm32f10x_it.h

到user目录下,当然也要在keil中添加

5.在魔法棒的c/c++中添加宏定义

请添加图片描述

6.添加头文件路径,就是跟之前的添加start的地方一样,把user和Library添加上

别忘了编译一下看看有无问题

7.代码示例:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	/*开启时钟*/
	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函数
	//GPIO_SetBits(GPIOC, GPIO_Pin_13);    //这是设置为高电平,即开灯
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);    //这是关灯
	
	/*主循环,循环体内的代码会一直循环执行*/
	while (1)
	{
        
	}
}

这一部分建议跟着视频走,因为这里有一些方法和快捷键的使用,比如ctrl+f查找词条和右键函数查看函数的定义和提示之类的,总之很有用

视频链接:【STM32入门教程-2023版 细致讲解 中文字幕】
https://www.bilibili.com/video/BV1th411z7sn?p=4&vd_source=0c4aa3557dd8a31bdbc16cd7f384a78a
资料链接:【STM32入门教程资料】
https://jiangxiekeji.com/download.html
上期的资料:
链接:https://pan.baidu.com/s/1R_4nLjRVheFz3QWnKC8-_Q?pwd=c982
提取码:c982

(侵删)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值