嵌入式开发2-新建工程2
一、硬件简单测试
本文采用的是江科大stm32入门套餐,使用的是STM32F103C8T6开发板,通过stlik将第嵌入式开发2中的程序烧录到开发板中。

1.硬件连接
stlink左端有usb端口可以插入电脑,右侧有很多引脚,我们主要用的是最右侧引脚,即2,4,6,8,10。对应引脚为下排引脚。本次使用的是SWCLK SWDIO GND 3.3V四个引脚

开发板用的也是最右侧引脚,GND SWCLK SWIO 3V3

将引脚对应连接
stlink 开发板
SWCLK---------------SWCLK
SWDIO----------------SWIO
GND--------------------GND
3.3V--------------------3.3V
2.软件配置调试器
点击魔法棒,点击debug选项卡,选择Use:ST-Link Debugger

之后点击settings-Flash Download,reset and run勾上,选择之后下载程序会立刻复位执行,否则每次下载,都需要手动按板子上的复位键才能执行程序

完成之后,在软件内重新编译,并点击load,将程序烧录到开发板中。
在此可能有以下问题:
Q1:程序报错,unknown target connected,这是由于博主stlink驱动未更新

解决方法:在ARM文件夹中找到stlink,双击upgrade进行更新,期间,需要重新拔插stlink,进行更新选择。更新成功后,进入keil,重新拔插stlink,重新编译程序并下载。

Q2:程序报错,stlink connection erro,这是由于博主设置debug有问题


重新进入debug设置,将port选择SW模式

以上完成后,重新烧录程序,能够正常进行
三、点灯测试(以寄存器操作为例)
1.使能时钟
如果要对某个端口设置,首先要进行时钟使能,可以从下图看出,要对GPIOC进行设置,那么需要通过使能APB2

在参考手册中,找到关于APB2使能操作,发现第四位是对PC端口进行使能操作配置的,那么其他位置0,转换成十六进制之后为0x00000010

所以RCC->APB2ENR=0X00000010;

2.设置端口模式(输出)
由于配置的是13端口,属于高寄存器,所以找到端口配置高寄存器,找到对应数字13需要配置的条件,CNF13和MODE13,由于该端口需要采取的是输出模式,CNF13选择00,通用推挽输出(该方法可以让用户直接控制输出电平),MODE选择11,输出模式,其他置0,转换为16进制后为0x00300000。

3.设置端口输出数据
找到13端口输出数据寄存器,如果该位写1就是高电平,写0就是低电平,在这里写1,其他位置0(十六进制为0x00002000),由于该灯是低电平点亮,所以该数据下会常灭。
改上述方法是利用寄存器控制,该方法有个弊端,就是除了pc13之外的位都置0,如果要做到只配置pc13,不配置其他位,就需要用与或非。
四、点灯测试(以库函数操作为例)
需要包含以下几步:
1.加入标准库函数
(1)通过新建文件夹library实现,keil里面也需要加组
(2)在user里面加入文件三个文件
2.设置工程选项
(1)设置define
(2)加入路径
3.编写程序
(1)使能时钟
1.加入库函数
在文件夹里新建库函数文件夹Library,接着打开固件库文件夹,打开Libraries,STM32标准外设驱动(STM32F10x_StdPeriph_Driver)
(1)打开src,复制文件夹内所有的文件,粘贴到Library。
(2)打开inc,复制文件夹内所有的文件,粘贴到Library。



2.软件加入库函数
返回keil软件,新建组重命名为Library,添加现有文件,将刚才新建文件夹内的所有文件都添加进来

其次还需要加入其他的文件,①打开Project-标准库,有conf.h和两个it文件,conf用来配置库函数之间包含关系,里面还有用来参数检查的函数定义,都是库函数需要的,两个it用来存放中断函数,复制以上三个文件,粘贴到工程文件User目录下。②返回keil在user组里添加现有文件,选择刚在粘贴的文件

③最后还需要一个宏定义,头文件这里右键打开文件

定义到一下位置,该段代码意思是,如果使用外设,下行inlude conf.h才有效。复制USE_STDPERIPH_DRIVER,打开工程选项(魔术棒)-C/C++里define栏目粘贴。

其次将路径添加上(user和library)

以上操作才可以包含标准外设库,也就是库函数
3.编写程序
(1)使能时钟
APB2使能时钟是以下函数,需要在括号写参数,我们可以右键跳到函数定义

该函数是用来使能或失能APB2时钟
第一个参数可以是以下参数,我们找到GPOIC选项,复制到函数定义那里
第二个参数可以是以下参数,在这里找到使能ENABLE,复制到第二个参数

操作完成如下。

接着设置端口模式,函数为GPIO_Init,同样方法,右键,需要注意的是这里是结构体,需要进行结构体定义,参数寻找也同样方式,如果参数定义在注释里面,可以选择并点击ctrl+f进行寻找

最后设置端口参数,由于该开发板PC13端口灯低电平亮,高电平灭,所以以下函数用于控制端口电平

注意:如果程序报错,可能是c语言要求将函数定义放在前面,需要将魔术棒-C/C++-c99勾上即可解决

五、启动文件选择
启动文件根据芯片型号选择的

可以观察启动文件末尾hd,ld等等都是根据缩写来定义,所以在选择启动文件时,可以查一下芯片Flash容量,该案例中芯片是STM32F103C8T6,Flash大小64k,所以选择了md的启动文件

六、新建工程总结(库函数)
1.建立工程文件夹,选择芯片型号
2.新建文件夹Start、Library、User,将固件库里的复制到里面
3.在keil中对应加入组Start、Library、User,并将其中的文件加入进来
4.工程选项,C/C++,inlude paths加入所有的路径;define定义;settings,Flash download里勾选Reset and Run
以下文件都需要包含

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)