STM32新建模板之寄存器
创建寄存器的项目模板相对比较简单,这里是基于库文件的模板进行更改的,有不明白的小伙伴可以浏览STM32新建模板之库文件。
一、项目文件
拷贝库文件的工程模板重命名为“stm32f10x_register”
删除STM32F10x_FWLib文件
删除CMSIS中不要的文件,保留startup、core_cm3.h、stm32f10x.h文件
删除USER中不要的文件,保留main.c文件,其余的全部删除,并创建sys.c和sys.h文件
二、创建工程项目
打开Keil软件,创建项目,项目名为STM32F10x_Temp
添加GROUP,添加两个个GROUP,并改名为startup、USER
为每个GROUP添加文件
startup,将文件startup_stm32f10x_hd.s添加到startup下
USER,将文件main.c、sys.c文件添加到USER下
添加完成后如下图所示:
设置编译文件的输出路径
设置默认编译版本
设置头文件路径
三、程序修改
修改startup_stm32f10x_hd.s
将图中的内容更改后如下图所示:
sys.c文件
#include "stm32f10x.h"
#define uint unsigned int
#define uchar unsigned char
#define CLOCK 72/8 //时钟=72M
/*------------------------------------------------------------
us延时函数
------------------------------------------------------------*/
void delay_us(unsigned int us)
{
u8 n;
while(us--)for(n=0;n<CLOCK;n++);
}
/*------------------------------------------------------------
ms延时函数
------------------------------------------------------------*/
void delay_ms(unsigned int ms)
{
while(ms--)delay_us(1000);
}
/*------------------------------------------------------------
把所有时钟寄存器复位
------------------------------------------------------------*/
void RCC_DeInit(void)
{
RCC->APB2RSTR = 0x00000000;//外设复位
RCC->APB1RSTR = 0x00000000;
RCC->AHBENR = 0x00000014; //flash时钟,闪存时钟使能.DMA时钟关闭
RCC->APB2ENR = 0x00000000; //外设时钟关闭.
RCC->APB1ENR = 0x00000000;
RCC->CR |= 0x00000001; //使能内部高速时钟HSION
RCC->CFGR &= 0xF8FF0000; //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
RCC->CR &= 0xFEF6FFFF; //复位HSEON,CSSON,PLLON
RCC->CR &= 0xFFFBFFFF; //复位HSEBYP
RCC->CFGR &= 0xFF80FFFF; //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
RCC->CIR = 0x00000000; //关闭所有中断
}
/*------------------------------------------------------------
外部8M,则得到72M的系统时钟
------------------------------------------------------------*/
void Stm32_Clock_Init(void)
{
unsigned char temp=0;
u8 timeout=0;
RCC_DeInit();
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
timeout=0;
while(!(RCC->CR>>17)&&timeout<200)timeout++;//等待外部时钟就绪
//0-24M 等待0;24-48M 等待1;48-72M等待2;(非常重要!)
FLASH->ACR|=0x32;//FLASH 2个延时周期
RCC->CFGR|=0X001D2400;//APB1/2=DIV2;AHB=DIV1;PLL=9*CLK;HSE作为PLL时钟源
RCC->CR|=0x01000000; //PLLON
timeout=0;
while(!(RCC->CR>>25)&&timeout<200)timeout++;//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02&&timeout<200) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
timeout++;
temp&=0x03;
}
}
- sys.h文件
#ifndef __SYS_H
#define __SYS_H
//us延时函数
void delay_us(unsigned int us);
//ms延时函数
void delay_ms(unsigned int ms);
//把所有时钟寄存器复位
void RCC_DeInit(void);
//外部8M,则得到72M的系统时钟
void Stm32_Clock_Init(void);
#endif
- main.c文件
#include "stm32f10x.h"
#include "sys.h"
/*------------------------------------------------------------
主函数
------------------------------------------------------------*/
int main()
{
Stm32_Clock_Init();//系统时钟设置
RCC->APB2ENR |= 0x00000001; //开启afio时钟
//AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000; //关闭JTAG
RCC->APB2ENR|=0X0000001c;//先使能外设IO PORTa,b,c时钟
GPIOB->CRH=0X33333333; //推挽输出
GPIOB->CRL=0X33333333; //推挽输出
while (1)
{
delay_ms(1000);
GPIOB->ODR=0; //全部输出0
delay_ms(1000);
GPIOB->ODR=0xffffffff; //全部输出1
}
}
四、编译下载
编译程序
通过isp下载程序
下载完成后,可以看到LED灯会进行闪烁则说明项目创建成功,到此寄存器板的工程模板比库文件的创建简单。
STM32新建模板之寄存器的更多相关文章
- STM32新建模板之库文件
一.新建项目文件夹 在桌面创建项目文件夹,用于存放工程,命名为"stm32f10x_project" 在项目文件夹中创建3个文件夹,分别命名为:CMSIS.OUTPUT.STM32 ...
- Discuz3.3精仿小米风格整站模板制作——1、新建模板方案
术语说明: 模板——模板是一堆按照规定命名方式的html文件,用于指定整个论坛不同页面的外观. 标签——标签和模板共同作用以实现论坛换肤功能,其中标签主要控制页面显示什么数据,显示多少条等. 风格—— ...
- phpcms新建模板页教程
phpcms新建模板页教程1 直接去template文件夹里的复制的模板页 比方说list1.html2 去后台 界面模板风格 default 默认模板 点击详情列表 找到list1.htm 设置中文 ...
- STM32入门系列-创建寄存器模板
介绍如何使用 KEIL5 软件创建寄存器模板, 方便之后使用寄存器方式来操作STM32开发板上的LED,让大家创建属于自己的寄存器工程模板. 获取工程模板的基础文件 首先我们在电脑任意位置创建一个文件 ...
- stm32的hall库新建模板编译错误: #error "Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)"的处理
在stm32f1xx.h file文件中找到如下代码: /* Uncomment the line below according to the target STM32L device used i ...
- STM32的操作过程,寄存器配置与调试过程(转载)
很多学习stm32的,为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子 ...
- 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- Pycharm新建模板默认添加作者时间等信息
在pycharm使用过程中,对于每次新建文件的shebang行和关于代码编写者的一些个人信息快捷填写,使用模板的方式比较方便. 方法如下: 1.打开pycharm,选择File-Settings 2. ...
- VS2017自定义新建模板
今天测试了一下用自定义的模板新建C++模板,结果出了一些问题,不过已经解决了,现在把经验分享出来. 1. 首先可以先自定义一个以后经常用的模板,例如下面这个. 2. 项目 下找到 导出模 ...
随机推荐
- 搞IT的应届生如何写好简历?
本人在互联网大厂和外企做过技术面试官,也有过校招和招聘应届毕业生的经验,所以自认为在这个问题上有一定的发言权. 应届毕业生(其实其他求职者也一样)首先要知道,面试官凭什么决定这份简历有面试机会?而 ...
- 什么是Docker?
容器技术的起源 假设你们公司正在秘密研发下一个"今日头条"APP,我们姑且称为明日头条,程序员自己从头到尾搭建了一套环境开始写代码,写完代码后程序员要把代码交给测试同学测试,这时测 ...
- Tornado WEB服务器框架 Epoll
引言: 回想Django的部署方式 以Django为代表的python web应用部署时采用wsgi协议与服务器对接(被服务器托管),而这类服务器通常都是基于多线程的,也就是说每一个网络请求服务器都会 ...
- JavaScript 中的防抖和节流
什么是防抖 函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时.如下图,持续触发 scrol ...
- MyBatis学习(四)MyBatis一对一关联查询
一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...
- JAVA中Map集合遍历
for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("key= " ...
- cmake之譬判断cmake的版本
note 有时候,可能使用的cmake语法 与cmake的版本有关系, 比如modern cmake. 这时候我们可以在 CMAKELISTS.TXT中 判断 cmakeLists.txt 代码 if ...
- C语言获取字符年月日时分秒毫秒
概述 本文演示环境: Windows10 使用C语言获取年月日时分秒毫秒, 代码 #include <iostream> #include <string> #include ...
- ubuntu用户、用户组设置命令总结
1.ubuntu创建新用户: sudo adduser username(新建一个用户username) 2.设置用户 username 的密码(设置用户username密码) sudo passwd ...
- java源码——计算大于一个数的最小素数
根据输入数字,计算大于一个数的最小素数. 话不多说,直接贴码. package com.fuxuemingzhu.countprime.main; import java.util.Scanner; ...