基于uVision中的STM32F103C8编程第一弹

以下是我学习基于uVision中的STM32F103C8编程的一点感悟和指导,分享出来,希望对大家有所帮助。如果有错误的地方可以留言指出来,我一定耐心听取。相信大家只要付出努力,就一定学有所成!

目录
一、配置uVision
二、基于uVision的第一个STM32F103C8程序
三、基于uVision的STM32F103C8LED开关程序
四、基于uVision的STM32F103C8的LED闪烁程序
五、基于uVision的STM32F103C8中流水灯程序

#1、配置uVision

当下载完uVision以后,首先运行安装程序,安装目录可以自己更改,注册信息也随意。在这里容易遇到的问题就是系统无法打开自定义安装所在的硬盘。*我的解决方法是把360安全助手关掉在安装就好了。*没有贬低360安全助手的意思哈。

下载完以后打开uVision软件,点击软件左上角file --> License Management 便会出现下图左侧name、company、email均为自己注册的信息,重要的是右上角红色圈的CID中的CID码。
在这里插入图片描述
这个时候运行运行uVision破解版程序,将这个CID码输入以后可以生成一个序列码,将这个序列码粘贴到这个页面的黑色圈出的地方,点击addLic,然后点击close即可。

#2、基于uVision的第一个STM32F103C8程序

2.1 首先点击project–>new uVision project,然后选择保存的地址保存即可,然后开始往这个项目里面添加一些配置文件。我以项目名为stm32,设备为STM32F103C8为例进行讲解。
在这里插入图片描述
2.2.1 创建好以后如下图所示其中library、startup、cmsis、user为我创建的四个文件夹,对应文件当学习的时候老师都会给出,或者上网上搜索,我这里就不枚举了。往这四个文件夹里添加文件就快速双击就可以选择文件添加了。

2.2.2 然后进行具体的配置。如下图点击蓝色处,会出现下图并按照target蓝色处进行
在这里插入图片描述
在这里插入图片描述

2.2.3 更改然后是output处可以画上蓝色处,对以后的维护和升级工作会有很大便利

在这里插入图片描述
2.2.4 然后是c/c++处添加文件路径的时候点击那三个”.”,会出现,
在这里插入图片描述
在这里插入图片描述
2.2.5 然后点击蓝色处添加即可然后是也可以检查一遍此页面的setting中是否有128k的设备。没有的话添加以下就好。
在这里插入图片描述
2.2.6 然后是安装驱动,运行驱动程序,同时插上STM32F103C8板子,然后检查是否有外设即可。

这样配置就完成了,就可以开始第一个程序尝试load了。以以下代码为例,首先在user下创建一个文件,写以下代码并且保存,并把这个文件添加到左侧project导航栏的对应文件夹user中

#include <stdio.h>
#include <stm32f10x.h>
Int main (){
return 0;
}

点击如图的1进行编译,2进行植入容易出现的问题是:
在这里插入图片描述

  1. 检查不到设备:解决方法是检查是否安装驱动、是否连接板子、板子是否充电并打开
  2. 是因为代码编写有错误,可能是头文件没有加空格,在include和<之间没有空格。
    错误2如图
    都成功以后在output中会出现类似下图内容,即表示load成功。以后再load之前一定要记得先编译一遍,这样才会植入最新版本代码。 这样,你的第一个项目就创建成功了。
    成功图片

#3、基于uVision的STM32F103C8LED开关程序

话不多说,献上代码

##打开程序如下
int main (){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//初始化时钟信号,我以all为例
GPIO_LED_INIT1.GPIO_Pin = GPIO_Pin_All;//选择pin1-4或者all,表示对应led灯
GPIO_LED_INIT1.GPIO_Speed = GPIO_Speed_2MHz;//初始化高低电压反转速度
GPIO_LED_INIT1.GPIO_Mode = GPIO_Mode_Out_PP;//初始化输入输出模式 GPIO_Init(GPIOA,&GPIO_LED_INIT1);//将时钟与对应led变量关联 GPIO_SetBits(GPIOA,GPIO_Pin_All);//设置指定数据端,就是让灯亮起来 return 0;
}

##关闭程序如下
int main (){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//初始化时钟信号,我以all为例
GPIO_LED_INIT1.GPIO_Pin = GPIO_Pin_All;//选择pin1-4或者all,表示对应led灯
GPIO_LED_INIT1.GPIO_Speed = GPIO_Speed_2MHz;//初始化高低电压反转速度
GPIO_LED_INIT1.GPIO_Mode = GPIO_Mode_Out_PP;//初始化输入输出模式 GPIO_Init(GPIOA,&GPIO_LED_INIT1);//将时钟与对应led变量关联 GPIO_ResetBits(GPIOA,GPIO_Pin_All);//设置指定数据端,就是让灯关闭 return 0;

}

#4、基于uVision的STM32F103C8的LED闪烁程序
void on_off(int time){
GPIO_LED_INIT1.GPIO_Pin = GPIO_Pin_All;//选择pin1-4或者all,表示对应led灯
GPIO_LED_INIT1.GPIO_Speed = GPIO_Speed_2MHz;//初始化高低电压反转速度
GPIO_LED_INIT1.GPIO_Mode = GPIO_Mode_Out_PP;//初始化输入输出模式 GPIO_Init(GPIOA,&GPIO_LED_INIT1);//将时钟与对应led变量关联
while(1){
GPIO_SetBits(GPIOA,GPIO_Pin_All)//设置指定数据端,就是让灯亮起来 delay(time);//我自己编写,sleep函数只适合window系统,我占在下面 GPIO_ResetBits(GPIOA,GPIO_Pin_All);//设置指定数据端,就是让灯关闭 delay(time);
}
}
void delay(int time){//时间是输入变量
while(time–){}
return;
}

#5、基于uVision的STM32F103C8中流水灯程序
void stream(int time){
GPIO_LED_INIT1.GPIO_Pin = GPIO_Pin_1;//选择pin1-4,定义四个变量 GPIO_LED_INIT1.GPIO_Speed = GPIO_Speed_2MHz; GPIO_LED_INIT1.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_LED_INIT2.GPIO_Pin = GPIO_Pin_2;//选择pin1-4 GPIO_LED_INIT2.GPIO_Speed = GPIO_Speed_2MHz; GPIO_LED_INIT2.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_LED_INIT3.GPIO_Pin = GPIO_Pin_3;//选择pin1-4 GPIO_LED_INIT3.GPIO_Speed = GPIO_Speed_2MHz; GPIO_LED_INIT3.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_LED_INIT4.GPIO_Pin = GPIO_Pin_4;//选择pin1-4 GPIO_LED_INIT4.GPIO_Speed = GPIO_Speed_2MHz; GPIO_LED_INIT4.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA,&GPIO_LED_INIT1);//将时钟与对应led变量关联 GPIO_Init(GPIOA,&GPIO_LED_INIT2);//将时钟与对应led变量关联 GPIO_Init(GPIOA,&GPIO_LED_INIT3);//将时钟与对应led变量关联 GPIO_Init(GPIOA,&GPIO_LED_INIT4);//将时钟与对应led变量关联

while(1){
GPIO_SetBits(GPIOA,GPIO_Pin_1);//设置指定数据端,就是让灯亮起来 GPIO_ResetBits(GPIOA,GPIO_Pin_2);//设置指定数据端,就是让灯关闭 GPIO_ResetBits(GPIOA,GPIO_Pin_3);//设置指定数据端,就是让灯关闭 GPIO_ResetBits(GPIOA,GPIO_Pin_4);//设置指定数据端,就是让灯关闭 delay(time);
GPIO_SetBits(GPIOA,GPIO_Pin_2);//设置指定数据端,就是让灯亮起来 GPIO_ResetBits(GPIOA,GPIO_Pin_1);//设置指定数据端,就是让灯关闭
//GPIO_ResetBits(GPIOA,GPIO_Pin_3);//设置指定数据端,就是让灯关闭
//GPIO_ResetBits(GPIOA,GPIO_Pin_4);//设置指定数据端,就是让灯关闭 delay(time);
GPIO_SetBits(GPIOA,GPIO_Pin_3);//设置指定数据端,就是让灯亮起来 GPIO_ResetBits(GPIOA,GPIO_Pin_2);//设置指定数据端,就是让灯关闭
//GPIO_ResetBits(GPIOA,GPIO_Pin_1);//设置指定数据端,就是让灯关闭
//GPIO_ResetBits(GPIOA,GPIO_Pin_4);//设置指定数据端,就是让灯关闭 delay(time);
GPIO_SetBits(GPIOA,GPIO_Pin_4);//设置指定数据端,就是让灯亮起来
//GPIO_ResetBits(GPIOA,GPIO_Pin_2);//设置指定数据端,就是让灯关闭 GPIO_ResetBits(GPIOA,GPIO_Pin_3);//设置指定数据端,就是让灯关闭
//GPIO_ResetBits(GPIOA,GPIO_Pin_1);//设置指定数据端,就是让灯关闭 delay(time);
}
}
具体的逻辑是比如说我想让led1亮,就让led2-4关闭,然后延迟一段时间,接下来也是一样的思路,但是新手编程时会有一定多于步骤,我用注释注释掉了。没有影响的

完成以上步骤,基本上就对基于uVision的STM32F103C8编程有一个基础的了解了。以后大家敬请期待,一同学习! 以下为一些资源文件,方便大家学习和使用。

猜你喜欢

转载自blog.csdn.net/weixin_43661569/article/details/100107576
今日推荐