一、硬件设备
所需设备:
1、STM32F103C8T6;
2、USB 转 TLL 或 ST-LINK V2 01-0;
3、杜邦线若干;
4、面包板1个;
5、USB安卓数据线(使用USB 转 TLL需要用到);
二、工程建立
1、首先需要建立一个STM32F103C8T6的keil工程。
可以根据以下链接结合实际情况建立。
(74条消息) STM32新建keil工程具体步骤(详细)_爱学习的小王呀的博客-CSDN博客
三、环境配置&编写代码
1、环境配置和代码可以参考以下两个链接:
(1):(74条消息) 用STM32F103C8T6制作流水灯_甜心猛男的博客-CSDN博客_c8t6烧程序时需要改变跳线帽位置吗
(2):(74条消息) STM32F103寄存器方式点亮LED流水灯_Melody crush的博客-CSDN博客_stm32f103寄存器led点灯
这里简单给出几张个人认为需要注意的点:
先点击
点击Device
配置红框内容 ,并点击Debug(如果使用USB 转 TTL则不用勾选蓝色框;如果使用ST-link做的则要勾选)
点击上图蓝色框里的Setting,选择Flash Download,进行以下配置。(如果不选Reset and Run则每次烧录到板上后都需要按一下板上的Reset按键才会看到现象。选不选看个人,影响不大)
2、编写main函数
//头文件
#include "stm32f10x.h"
#include "GPIOLIKE51.h"
//函数声明
void LED_Init(void);
void RCC_Configuration(void);
//=============================================================================
//文件名称:Delay
//功能概要:延时
//参数说明:nCount:延时长短
//函数返回:无
//=============================================================================
void Delay(uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
//=============================================================================
//文件名称:main
//功能概要:主函数
//参数说明:无
//函数返回:int
//=============================================================================
int main(void)
{
RCC_Configuration(); //开启GPIO时钟
LED_Init(); //初始LED引脚的GPIO口
while (1)
{
PAout(1)=0; //1为灭
Delay(0xfffff); //延时
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
PAout(1)=1;
PBout(12)=0; //0为亮
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
PBout(12)=1;
PCout(15)=0;
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
Delay(0xfffff);
PCout(15)=1;
}
}
//=============================================================================
//文件名称:RCC_Configuration
//功能概要:开启GPIO时钟
//参数说明:无
//函数返回:无
//=============================================================================
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA时钟并使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB时钟并使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //开启GPIOC时钟并使能
}
//=============================================================================
//文件名称:LED_Init
//功能概要:LED引脚的GPIO初始化
//参数说明:无
//函数返回:无
//=============================================================================
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //声明GPIO初始化结构体,声明要在最前面
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA时钟并使能
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1; //定义GPIO初始化结构体的GPIO引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //定义GPIO初始化结构体的GPIO输出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //定义GPIO初始化结构体的GPIO速率
GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化GPIO
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; //定义GPIO初始化结构体的GPIO引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //定义GPIO初始化结构体的GPIO输出模式,推挽输出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //定义GPIO初始化结构体的GPIO速率
GPIO_Init(GPIOB, &GPIO_InitStruct); //初始化GPIO
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15; //定义GPIO初始化结构体的GPIO引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //定义GPIO初始化结构体的GPIO输出模式,推挽输出模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //定义GPIO初始化结构体的GPIO速率
GPIO_Init(GPIOC, &GPIO_InitStruct); //初始化GPIO
}
点击下面两个任意一个编译
确保0错误,0警告。
四、硬件连接
1、USB 转 TTL 方式
(1)、将STM32F103C8T6插入面包板,注意!一定要插深一点!确保C8T6的引脚能和面包板进行导电!!(笔者因为这个小细节没注意,排查了好几天的代码、硬件,甚至以为是笔者焊接不到位,重新把板的引脚焊过...最后排查出来是面包板和开发板的引脚接触不紧密没导上电...血的眼泪...)
(2)、USB 转 TLL硬件插上电脑USB端口。
(3)、USB to TTL硬件和STM32F103C8T6连线。
跳线帽连接方式:UBOOT0 用1;UBOOT1用0。
USB转TTL连接方式:用杜邦线将USB to TTL的GND连开发板的GND、3.3V连3.3V、RXD连接PA9、TXD连接PA10
注意,下图此处有小红灯亮了,说明RXD连接PA9引脚连接可以导上电;如果是不亮的,则要检查一下是否会导电。
LED小灯连接方式:根据代码设定的GPIO端口,把LED小灯插到对应的引脚即可。笔者插的是A1、B12、C15引脚。注意!小灯泡会有高低脚,高的一侧要插正极,低的一侧插负极。
接地连接方式:用杜邦线把开发板上的G和面包板两侧的蓝色负极行连接起来。
最终连接效果:
(4)、打开设备管理器,确保有USB-SERIAL CH340(COMx)(如果没有显示或显示未知设备就去安装一个CH340的驱动)
(5)、打开FlyMCU,确保刚才端口是空闲状态(一般来讲,设备管理器识别的COM口号和FlyMCU的COM口号是一致的。这里解释一下为什么这里的COM口号和上面不同,因为笔者没有当时的截图,下面这张图时后来写博客时补的图...原来的端口电脑经常识别有误,所以插了另一个端口。)
(6)、进行以下配置,并点击三个小点...处,选择工程编译生成的.hex文件,点击开始编程。
(7)、别忘记按板上的Reset键,按了之后才会有反应。
*常见问题:
1、未知USB设备(设备描述符请求失败)
2、FlyMCU的Port端口显示占用
解决方法:右键卸载这个设备,再重新插拔USB 转 TTL,多试几次。笔者怀疑是USB转TLL和拓展坞的USB口接触不好导致的。
3、Fly MCU 出现无法打开串口
原因:说明电脑没有识别到USB转TTL的端口,请确保USB转TTL已经插上。如果确认插上,说明还是接触不好的问题。
解决方法:重新插拔USB 转 TTL,多试几次。(如果有条件,可以尝试更换一个TTL)
4、无法打开串口COMx:Not Support Setting(bps/byte size etc)!
原因:RXD连接PA9没有成功,需要检查一下PA9引脚是否导电,可以看USB转TTL上的小红灯有没有亮,没亮就是没导上电。
解决方法:1、更换TTL;2、更换杜邦线;3、插拔USB转TTL;4、重新焊接PA9引脚;5、如果之前烧录过其他程序,则尝试一下按Reset后再试一次。
2、ST-LINK V2 01-0方式
(1)、将STM32F103C8T6插入面包板,注意!一定要插深一点!确保C8T6的引脚能和面包板进行导电!!
(2)、ST-LINK V2仿真编程器插上电脑USB端口。
(3)、ST-LINK V2仿真编程器和STM32F103C8T6连线。
跳线帽连接方式:UBOOT0 用0;UBOOT1用0。
ST-LINK和电脑连接方式:(开发板上的DCLK就是ST-LINK上的CLK)
LED小灯连接方式:根据代码设定的GPIO端口,把LED小灯插到对应的引脚即可。笔者插的是A1、B12、C15引脚。注意!小灯泡会有高低脚,高的一侧要插正极,低的一侧插负极。
接地连接方式:用杜邦线把开发板上的G和面包板两侧的蓝色负极行连接起来。
连接最终效果:
(4)、打开设备管理器,确保有STM32 STLink (如果没有显示或显示未知设备就去安装一个STLink的驱动)
(5)、打开Keil,在确认编译过、0错误,0警告后点击LOAD下载按钮。
显示下载成功信息。
(6)、如果在Debug的Setting勾选了Reset and Run则直接可以看到灯亮现象;如果没有勾选Reset and Run则需要再按一下开发板上的RESET按键才可以观察到灯亮现象。
五、实验效果
1、USB to TTL:
2、ST-LINK V2 :
文章来源:https://www.toymoban.com/news/detail-779324.html
六、写在最后
感谢文中所引用博客的作者提供了思路和帮助,再次感谢。文章来源地址https://www.toymoban.com/news/detail-779324.html
到了这里,关于基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!