軟件準(zhǔn)備:keil uVsion 5 和 proteus 8.15
一、原理圖的繪制
打開proteus8.15 -> 新建項(xiàng)目 -> 改名 -> 一直next
鼠標(biāo)右鍵 -> 放置 -> 元件 -> From Libraries
搜索Stm32 -> 選擇stm32f103c8
畫出點(diǎn)亮一個(gè)LED燈的原理圖
提示,各元器件搜索:
主控芯片:stm32
電阻:res
LED燈:led
鼠標(biāo)右鍵 -> 放置 -> 元件 -> From Libraries
地和VCC 在左側(cè)工具欄
二、代碼的編寫
1.新建一個(gè)工程模板
這里采用正點(diǎn)原子提供的工程模板
復(fù)制工程模板,改名為1.點(diǎn)亮一個(gè)LED燈
工程模板下載鏈接:
鏈接:https://pan.baidu.com/s/14c7aIfUNBSR0quoEuqbN5g
提取碼:sfdh
2.打開新建的項(xiàng)目
在項(xiàng)目文件夾 -> USER下的.uvprojx
點(diǎn)擊即可通過keil_v5打開
3.點(diǎn)亮一個(gè)LED燈代碼
led.c文件的內(nèi)容
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
//聲明一個(gè)結(jié)構(gòu)體,名字是GPIO_InitStructure
GPIO_InitTypeDef GPIO_InitStructure;
//使能GPIOC的時(shí)鐘,ENABLE代表使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//GPIOC
//設(shè)置引腳為推挽輸出Out_PP
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//定義引腳為哪一號引腳,GPIO_Pin_13就是13號引腳
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
//設(shè)置引腳的速度50MHz
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//初始化GPIO,初始化哪個(gè)引腳就對應(yīng)哪個(gè)
GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化GPIOC,所以引腳對應(yīng)PC13
GPIO_SetBits(GPIOC,GPIO_Pin_13); //PC13引腳拉高電平
}
GPIO_SetBits(GPIOC,GPIO_Pin_13); 為設(shè)置PC13為高電平
GPIO_ResetBits(GPIOC,GPIO_Pin_13); 為設(shè)置PC13為低電平
led.h頭文件的內(nèi)容
#ifndef __LED_H //頭文件的格式
#define __LED_H
void LED_Init(void); //函數(shù)的聲明
#endif
main.c的內(nèi)容
#include "stm32f10x.h"
#include "led.h" //led的頭文件
#include "delay.h"
int main(void)
{
delay_init();
LED_Init();
while(1){ //主循環(huán)
//由原理圖,拉低電平-> LED燈亮
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
delay_ms(500);
//拉高電平-> LED燈滅
GPIO_SetBits(GPIOC,GPIO_Pin_13);
delay_ms(500);
}
}
4.設(shè)置生成.hex文件
魔術(shù)棒-> Output -> 勾選Create HEX File -> ok
編譯運(yùn)行代碼
0錯(cuò)誤,0警告
5.上傳.hex文件到proteus
打開proteus
雙擊芯片->選擇Program File的路徑
選擇剛剛生成的.hex文件打開
6.仿真運(yùn)行
點(diǎn)擊左下角運(yùn)行
需要暫停運(yùn)行也是在左下角
注意:只有停止運(yùn)行才能修改原理圖
三、更多功能的實(shí)現(xiàn)
1.點(diǎn)亮一排LED燈
led.c文件新增幾個(gè)引腳
led.c文件的內(nèi)容:
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//GPIOC
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
//PC13、PC14、PC15引腳拉高電平
GPIO_SetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}
led.h頭文件內(nèi)容不變
main.c文件:(三個(gè)燈一起亮、一起滅)
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init();
LED_Init();
while(1){ //效果是三個(gè)燈一起亮、一起滅
GPIO_ResetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
delay_ms(500);
//上面x|x|x 和下面分開寫的效果是一樣的
GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_SetBits(GPIOC,GPIO_Pin_14);
GPIO_SetBits(GPIOC,GPIO_Pin_15);
delay_ms(500);
}
}
2.點(diǎn)亮流水燈
main.c文件:(流水燈)
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init();
LED_Init();
while(1){ //效果是三個(gè)燈輪流亮(流水燈)
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_14);
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_14);
GPIO_ResetBits(GPIOC,GPIO_Pin_15);
delay_ms(500);
GPIO_SetBits(GPIOC,GPIO_Pin_15);
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-717697.html
四、項(xiàng)目(代碼+仿真)分享鏈接
百度網(wǎng)盤
鏈接:https://pan.baidu.com/s/1pcVtAcER2mAwnQnyRL3aXQ
提取碼:p8q4文章來源地址http://www.zghlxwxcb.cn/news/detail-717697.html
到了這里,關(guān)于Stm32f103c8t6(proteus仿真)學(xué)習(xí)——1.點(diǎn)亮LED流水燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!