IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> i.max6ull裸机开发之C语言点灯篇 -> 正文阅读

[C++知识库]i.max6ull裸机开发之C语言点灯篇

STM32使用寄存器开发程序是如何执行的,
在这里插入图片描述
在这里插入图片描述

i.max6ull的汇编文件

.global __start

__start:
      /*设置处理器进入svc模式下*/

    mrs r0, cpsr        /*读取cpsr到r0*/
    bic r0, r0,  #0x1f  /*清除cpsr的bit4-0*/
    orr r0, r0,  #0x13  /*使用svc模式*/
    msr cpsr, r0        /*将r0写入到cpsr*/


    /*设置sp指针*/
    ldr sp, =0x80200000
    b main      /*跳转到c语言mian函数*/

这时候就可以跳转到mian.函数里面执行了,像stm32一样直接操作就可以了,万事开头难,在第一个c语言点灯,可以做好一个模板,涉及到所有时钟地址,所有GPIO地址等等,这样也相当于自己构建了一个小库函数,废话不多说,开干。

1,时钟

这是所有外设的时钟,全找到写好,以后直接copy,
在这里插入图片描述

我们要找到这些时钟的地址,如下:
这是CCM_CCGR0的地址,就这样找到所有的,拿小本本记下来,
在这里插入图片描述

所有的时钟寄存器地址

 #define CCM_CCGR0 *((volatile unsigned int *)0X020C4068)
 #define CCM_CCGR1 *((volatile unsigned int *)0X020C406C)
 #define CCM_CCGR2 *((volatile unsigned int *)0X020C4070) 
 #define CCM_CCGR3 *((volatile unsigned int *)0X020C4074)
 #define CCM_CCGR4 *((volatile unsigned int *)0X020C4078) 
 #define CCM_CCGR5 *((volatile unsigned int *)0X020C407C)
 #define CCM_CCGR6 *((volatile unsigned int *)0X020C4080)

2,IO复用

接下来找到这十组io的地址
在这里插入图片描述

#define SW_MUX_GPIO1_IO00 *((volatile unsigned int *)0X020E005C) 
#define SW_MUX_GPIO1_IO01 *((volatile unsigned int *)0X020E0060) 
#define SW_MUX_GPIO1_IO02 *((volatile unsigned int *)0X020E0064) 
#define SW_MUX_GPIO1_IO03 *((volatile unsigned int *)0X020E0068) 
#define SW_MUX_GPIO1_IO04 *((volatile unsigned int *)0X020E006C) 
#define SW_MUX_GPIO1_IO05 *((volatile unsigned int *)0X020E0070) 
#define SW_MUX_GPIO1_IO06 *((volatile unsigned int *)0X020E0074) 
#define SW_MUX_GPIO1_IO07 *((volatile unsigned int *)0X020E0078) 
#define SW_MUX_GPIO1_IO08 *((volatile unsigned int *)0X020E007C) 
#define SW_MUX_GPIO1_IO09 *((volatile unsigned int *)0X020E0080) 

3,电气属性

电气属性这里就要根据情况配置了

SER ------------- bit0--------------------------压摆率(io电平跳变所需时间,0跳变慢,1跳变快)
DSE ------------- bit5-3-----------------------io驱动能力(八个选项000-111驱动能力依次增大)
SPEED---------- bit7-6-----------------------输出速率(50,100,100,200四个选项–》00,01,10,11)
ODE---------------bit11------------------------开路输出(0禁止,1使能)
PkE----------------bit12------------------------状态保持器/上下拉(仅输入有效)0,禁止 1使能
PUE---------------bit13------------------------设置保持器/上下拉(仅输入有效)0不使用1使用
PUS---------------bit14-15--------------------设置上下拉电阻大小(100k下,47k上,100k上,22k上—》00 01 10 11)
HYS---------------bit16-------------------------迟滞比较器(仅输入有效)输入波形整形 使能1
上述其它位保留

这是点灯所配置的
 #define SW_PAD_GPIO1_IO03 *((volatile unsigned int *)0X020E02F4)

4,io功能

在这里插入图片描述

在这里插入图片描述

#define GPIO1_DR *((volatile unsigned int *)0X0209C000)
#define GPIO1_GDIR *((volatile unsigned int *)0X0209C004)
#define GPIO1_PSR *((volatile unsigned int *)0X0209C008)
#define GPIO1_ICR1 *((volatile unsigned int *)0X0209C00C)
#define GPIO1_ICR2 *((volatile unsigned int *)0X0209C010)
#define GPIO1_IMR *((volatile unsigned int *)0X0209C014)
#define GPIO1_ISR *((volatile unsigned int *)0X0209C018)
#define GPIO1_EDGE_SEL *((volatile unsigned int *)0X0209C01C)

构建如下

led.c

#include "led.h"



void led_init(void)
{
    CCM_CCGR1 = 0xffffffff;/*配置时钟*/
    SW_MUX_GPIO1_IO03 = 0x05;  /*io复用*/
    SW_PAD_GPIO1_IO03 = 0X10B0; /*电气属性*/
    GPIO1_GDIR = 0X0000008; /* GPIO, GPIO1_IO03 设置为输出 */
    LED0_OFF;/*默认关闭LED*/
}



/*函数功能:控制LED状态*/
void LED(int state)
{
    if(state==1) LED0_ON;
    if(state==0) LED0_OFF;
}

led.h

#ifndef __led_h
#define __led_h


/*定义要使用的寄存器*/

/*时钟-----------------手册698-707*/
#define   CCM_CCGR0   *((volatile unsigned long*)0x020c4068) /*直接读写寄存器*/
#define   CCM_CCGR1   *((volatile unsigned int *)0X020C406C)
#define   CCM_CCGR2   *((volatile unsigned int *)0X020C4070) 
#define   CCM_CCGR3   *((volatile unsigned int *)0X020C4074)
#define   CCM_CCGR4   *((volatile unsigned int *)0X020C4078) 
#define   CCM_CCGR5   *((volatile unsigned int *)0X020C407C)
#define   CCM_CCGR6   *((volatile unsigned int *)0X020C4080)


/*io复用---------------手册1568-1577*/
#define SW_MUX_GPIO1_IO00 *((volatile unsigned int *)0X020E005C) 
#define SW_MUX_GPIO1_IO01 *((volatile unsigned int *)0X020E0060) 
#define SW_MUX_GPIO1_IO02 *((volatile unsigned int *)0X020E0064) 
#define SW_MUX_GPIO1_IO03 *((volatile unsigned int *)0X020E0068) 
#define SW_MUX_GPIO1_IO04 *((volatile unsigned int *)0X020E006C) 
#define SW_MUX_GPIO1_IO05 *((volatile unsigned int *)0X020E0070) 
#define SW_MUX_GPIO1_IO06 *((volatile unsigned int *)0X020E0074) 
#define SW_MUX_GPIO1_IO07 *((volatile unsigned int *)0X020E0078) 
#define SW_MUX_GPIO1_IO08 *((volatile unsigned int *)0X020E007C) 
#define SW_MUX_GPIO1_IO09 *((volatile unsigned int *)0X020E0080) 


/*电气属性--------------手册1789-1805*/
 #define SW_PAD_GPIO1_IO03 *((volatile unsigned int *)0X020E02F4)  /*16位寄存器*/
/*
 *bit 16:0 HYS 关闭
 *bit [15:14]: 00 默认下拉
 *bit [13]: 0 kepper 功能
 *bit [12]: 1 pull/keeper 使能
 *bit [11]: 0 关闭开路输出
 *bit [7:6]: 10 速度 100Mhz
 *bit [5:3]: 110 R0/6 驱动能力
 *bit [0]: 0 低转换率
 */
 


/*io功能---------------手册1358-1369*/
#define GPIO1_DR   *((volatile unsigned int *)0X0209C000)                       /*DR----------数据寄存器*/
#define GPIO1_GDIR *((volatile unsigned int *)0X0209C004)                       /*GDIR--------方向寄存器*/   
#define GPIO1_PSR  *((volatile unsigned int *)0X0209C008)                       /*PSR---------GPIO状态寄存器*/
#define GPIO1_ICR1 *((volatile unsigned int *)0X0209C00C)                       /*ICR1--------低16位中断控制寄存器*/
#define GPIO1_ICR2 *((volatile unsigned int *)0X0209C010)                       /*ICR2--------高十六位中断控制寄存器*/
#define GPIO1_IMR  *((volatile unsigned int *)0X0209C014)                       /*IMR---------中断屏蔽寄存器*/
#define GPIO1_ISR  *((volatile unsigned int *)0X0209C018)                       /*ISR---------中断状态寄存器*/
#define GPIO1_EDGE_SEL *((volatile unsigned int *)0X0209C01C)                   /*EDGE_SEL----边沿选择寄存器*/



#define LED0_ON     GPIO1_DR &= ~(1<<3);  
#define LED0_OFF    GPIO1_DR |= (1<<3);


void led_init(void);
void LED(int state);


#endif /*__led_h*/ 

自己做了一个模板工程
在这里插入图片描述

板级支持包和应用分开构建,有利于后期做驱动移植

点击下载link

提取码:0117

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 16:01:53  更:2021-07-27 16:03:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 22:52:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码