打印
[应用相关]

stm32f10x单片机寄存器初探,使用寄存器点亮LED

[复制链接]
288|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

需要的资源有 stm32f10x开发板一块  stm32中文参考手册


首先我们来了解一下单片机的启动文件,根据单片机大小的不同需要选择不同的启动文件



使用特权

评论回复
沙发
自动化陈稳|  楼主 | 2021-4-26 17:53 | 只看该作者
1.好的我们现在来新建一个工程文件

使用特权

评论回复
板凳
自动化陈稳|  楼主 | 2021-4-26 17:54 | 只看该作者
2.接下来进入单片机选择界面  在这个界面选择的需要在st官方网站下载才可以,如果没有的话请前往下载。
这里我选择的是zet6 大容量的芯片,这个根据您的实际情况来选择。

使用特权

评论回复
地板
自动化陈稳|  楼主 | 2021-4-26 21:44 | 只看该作者

使用特权

评论回复
5
自动化陈稳|  楼主 | 2021-4-26 21:49 | 只看该作者
下面我们得到的就是一个空的工程文件里面什么都没有,现在我们来添加内容

使用特权

评论回复
6
自动化陈稳|  楼主 | 2021-4-26 21:53 | 只看该作者

使用特权

评论回复
7
自动化陈稳|  楼主 | 2021-4-26 21:54 | 只看该作者
我们要在这个文件下面复制我们需要的启动文件到工程里面,在添加进去。在文件添加好了过后就可以进行程序的编写了

main.c   使其PB.5端口闪烁

使用特权

评论回复
8
自动化陈稳|  楼主 | 2021-4-26 21:56 | 只看该作者
#include "stm32f10x.h"


void delay10ms(int w)
{  
   unsigned char i,j,k;
   for(i=w;i>0;i--)
      for(j=4;j>0;j--)
        for(k=248;k>0;k--);
}

void  main(void)
{
        //配置系统时钟
        *(unsigned int *)0x40021018 |=(1<<3);//配置PB端口时钟
       
       
        //配置为PB.5端口输出
        *(unsigned int *)0X40010C00 |=(3<<(4*5));//ODR寄存器
       
        //PB.5端口输出低电平
        *(unsigned int *)0X40010C0C &=~(1<<5);//ODR寄存器
       
        while(1)
        {
                //PB.5端口输出低电平
          *(unsigned int *)0X40010C0C &=~(1<<5);//ODR寄存器
                delay10ms(200);
               
                //PB.5端口输出高电平
          *(unsigned int *)0X40010C0C |=(1<<5);//ODR寄存器
                delay10ms(200);
        }
       
        //置位  |=   //就是让其中一位变为1从而不影响其他的位
       
        //清零  &~=  //就是让其中一位清零从而不影响其他的位
}




//这个函数为空的话就是没有配置时钟
//单片机就采用内部8MHZ的时钟
void SystemInit()//这个是一个时钟配置函数
{
        //骗编译器
}








使用特权

评论回复
9
自动化陈稳|  楼主 | 2021-4-26 21:58 | 只看该作者
第一个我们要了解的就是RCC时钟使能寄存器,在使用之前我们要知道PB这个时钟是挂载在那条时钟总线上面的。

使用特权

评论回复
10
自动化陈稳|  楼主 | 2021-4-26 22:01 | 只看该作者
下图我们了解到了 PB端口是在  APB2这个总线上面的接下来,我们就找到  6.3.7 APB2外设时钟使能寄存器(RCC_APB2ENR)先使能时钟。  PB的地址是  0X4001 0C00

使用特权

评论回复
11
自动化陈稳|  楼主 | 2021-4-26 22:02 | 只看该作者

使用特权

评论回复
12
自动化陈稳|  楼主 | 2021-4-26 22:02 | 只看该作者
找到过后我们要看一下它的地址已经偏移量,  通过下图我们可以了解到它的偏移地址是0x18 , PB在第3的位, 为0时关闭时钟为1时使能时钟。 我们已经知道RCC的地址是  0x4002 1000,

接下来写程序的时候就已经把地址确定了,地址就是   0x40021000+0x18=0x40021018

知道它的地址了我们就可以来写程序了    

*(unsigned int *)0x40021018 |=(1<<3);//配置PB端口时钟

这里这样定义就直接把这里变为地址量在左移3位置1配置就完成了,接下来PB.5的输出配置以及输出高低电平的配置都可以参考这个方法来做就可以了。

使用特权

评论回复
13
自动化陈稳|  楼主 | 2021-4-26 22:03 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

1182

帖子

1

粉丝