所需设备:
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警告。
跳线帽连接方式: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和面包板两侧的蓝色负极行连接起来。
最终连接效果:
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后再试一次。
跳线帽连接方式:UBOOT0 用0;UBOOT1用0。
ST-LINK和电脑连接方式:(开发板上的DCLK就是ST-LINK上的CLK)
LED小灯连接方式:根据代码设定的GPIO端口,把LED小灯插到对应的引脚即可。笔者插的是A1、B12、C15引脚。注意!小灯泡会有高低脚,高的一侧要插正极,低的一侧插负极。
接地连接方式:用杜邦线把开发板上的G和面包板两侧的蓝色负极行连接起来。
连接最终效果:
显示下载成功信息。
感谢文中所引用博客的作者提供了思路和帮助,再次感谢。