基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡

 一、硬件设备

        所需设备:

                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点灯

        这里简单给出几张个人认为需要注意的点:

        先点击基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第1张图片        

点击Device

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第2张图片

 配置红框内容 ,并点击Debug(如果使用USB 转 TTL则不用勾选蓝色框;如果使用ST-link做的则要勾选)基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第3张图片

 点击上图蓝色框里的Setting,选择Flash Download,进行以下配置。(如果不选Reset and Run则每次烧录到板上后都需要按一下板上的Reset按键才会看到现象。选不选看个人,影响不大)

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第4张图片

 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

		
}

点击下面两个任意一个编译

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第5张图片

确保0错误,0警告。

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第6张图片

四、硬件连接

        1、USB 转 TTL 方式

                (1)、将STM32F103C8T6插入面包板,注意!一定要插深一点!确保C8T6的引脚能和面包板进行导电!!(笔者因为这个小细节没注意,排查了好几天的代码、硬件,甚至以为是笔者焊接不到位,重新把板的引脚焊过...最后排查出来是面包板和开发板的引脚接触不紧密没导上电...血的眼泪...)

                (2)、USB 转 TLL硬件插上电脑USB端口。

                (3)、USB to TTL硬件和STM32F103C8T6连线。

                        跳线帽连接方式:UBOOT0 用1;UBOOT1用0

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第7张图片

                        USB转TTL连接方式:用杜邦线将USB to TTL的GND连开发板的GND、3.3V连3.3V、RXD连接PA9TXD连接PA10

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第8张图片

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第9张图片

注意,下图此处有小红灯亮了,说明RXD连接PA9引脚连接可以导上电;如果是不亮的,则要检查一下是否会导电。

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第10张图片

LED小灯连接方式:根据代码设定的GPIO端口,把LED小灯插到对应的引脚即可。笔者插的是A1、B12、C15引脚。注意!小灯泡会有高低脚,高的一侧要插正极,低的一侧插负极。

接地连接方式:用杜邦线把开发板上的G和面包板两侧的蓝色负极行连接起来。

 最终连接效果:

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第11张图片

                (4)、打开设备管理器,确保有USB-SERIAL CH340(COMx)(如果没有显示或显示未知设备就去安装一个CH340的驱动)

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第12张图片

                 (5)、打开FlyMCU,确保刚才端口是空闲状态(一般来讲,设备管理器识别的COM口号和FlyMCU的COM口号是一致的。这里解释一下为什么这里的COM口号和上面不同,因为笔者没有当时的截图,下面这张图时后来写博客时补的图...原来的端口电脑经常识别有误,所以插了另一个端口。)

                     基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第13张图片

                 (6)、进行以下配置,并点击三个小点...处,选择工程编译生成的.hex文件,点击开始编程。

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第14张图片

                 (7)、别忘记按板上的Reset键,按了之后才会有反应。

 *常见问题:

        1、未知USB设备(设备描述符请求失败)

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第15张图片

       2、FlyMCU的Port端口显示占用

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第16张图片

解决方法:右键卸载这个设备,再重新插拔USB 转 TTL,多试几次。笔者怀疑是USB转TLL和拓展坞的USB口接触不好导致的。

        3、Fly MCU 出现无法打开串口

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第17张图片

原因:说明电脑没有识别到USB转TTL的端口,请确保USB转TTL已经插上。如果确认插上,说明还是接触不好的问题。

解决方法:重新插拔USB 转 TTL,多试几次。(如果有条件,可以尝试更换一个TTL)

        4、无法打开串口COMx:Not Support Setting(bps/byte size etc)!

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第18张图片

原因: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端口。

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第19张图片

                (3)、ST-LINK V2仿真编程器和STM32F103C8T6连线。

                        跳线帽连接方式:UBOOT0 用0;UBOOT1用0

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第20张图片

                        ST-LINK和电脑连接方式:(开发板上的DCLK就是ST-LINK上的CLK)

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第21张图片

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第22张图片

                LED小灯连接方式:根据代码设定的GPIO端口,把LED小灯插到对应的引脚即可。笔者插的是A1、B12、C15引脚。注意!小灯泡会有高低脚,高的一侧要插正极,低的一侧插负极。

                接地连接方式:用杜邦线把开发板上的G和面包板两侧的蓝色负极行连接起来。

 连接最终效果:

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第23张图片

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第24张图片

        (4)、打开设备管理器,确保有STM32 STLink (如果没有显示或显示未知设备就去安装一个STLink的驱动)

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第25张图片

        (5)、打开Keil,在确认编译过、0错误,0警告后点击LOAD下载按钮。

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第26张图片

                显示下载成功信息。

基于STM32F103C8T6以USB to TTL 和 ST-LINK V2两种方式点亮LED小灯泡_第27张图片

        (6)、如果在Debug的Setting勾选了Reset and Run则直接可以看到灯亮现象;如果没有勾选Reset and Run则需要再按一下开发板上的RESET按键才可以观察到灯亮现象。

五、实验效果

        1、USB to TTL:

        2、ST-LINK V2 :

六、写在最后

        感谢文中所引用博客的作者提供了思路和帮助,再次感谢。

你可能感兴趣的:(stm32,单片机,嵌入式硬件)