学习正点原子开发板,发现点亮LED个程序并没有讲解的特别详细。我只看了驱动开发指南,不知道是别的文档讲过还是说后面有更好的实现方法,这个程序只是入门。不过既然是学习就仔细一点,至少把不明白的程序搞懂。其实对于初学者这个程序最难的应该是时钟树,我是迷糊了好久。stm32为了降低功耗和提供更大的外设设置灵活度,将时钟的配置完全交给了使用者,提升功能强度也提高了上手的门槛。但是系统时钟和总线时钟存在默认状态,可以不配置。而外设时钟默认全部是关闭状态,必须进行配置。

首先,手册上已经写了外设的起始地址为0x40000000

而时钟和IO都在在AHB4上,地址是0x50000000

RCC的地址是0x50000000,GPIOI的地址是0x5000A000

AHB4的时钟在RCC+0xA28的位置

GPIOI的时钟在第八位

GPIO的寄存器功能介绍

接下来看程序:

void led_switch(u8 sta){u32 val = 0;if(sta == LEDON) {val = readl(GPIOI_BSRR_PI);val |= (1 << 16);    writel(val, GPIOI_BSRR_PI);}else if(sta == LEDOFF) {val = readl(GPIOI_BSRR_PI);val|= (1 << 0);    writel(val, GPIOI_BSRR_PI);}    }

很好理解,读BSRR寄存器,在0位或16位写入1

BBSR是置位复位寄存器,写入高16位是输出低电平,写入低16位是输出高电平。这个寄存器实际是只写的,读只有0x0000。例程应该是为了统一规范

 /* 2、使能PI时钟 */val = readl(MPU_AHB4_PERIPH_RCC_PI);val &= ~(0X1 << 8);   /* 清除以前的设置 */val |= (0X1 << 8);  /* 设置新值 */writel(val, MPU_AHB4_PERIPH_RCC_PI);/* 3、设置PI0通用的输出模式。*/val = readl(GPIOI_MODER_PI);val &= ~(0X3 << 0);   /* bit0:1清零 */val |= (0X1 << 0); /* bit0:1设置01 */writel(val, GPIOI_MODER_PI);/* 3、设置PI0为推挽模式。*/val = readl(GPIOI_OTYPER_PI);val &= ~(0X1 << 0);  /* bit0清零,设置为上拉*/writel(val, GPIOI_OTYPER_PI);/* 4、设置PI0为高速。*/val = readl(GPIOI_OSPEEDR_PI);val &= ~(0X3 << 0); /* bit0:1 清零 */val |= (0x2 << 0); /* bit0:1 设置为10*/writel(val, GPIOI_OSPEEDR_PI);/* 5、设置PI0为上拉。*/val = readl(GPIOI_PUPDR_PI);val &= ~(0X3 << 0); /* bit0:1 清零*/val |= (0x1 << 0); /*bit0:1 设置为01*/writel(val,GPIOI_PUPDR_PI);/* 6、默认关闭LED */val = readl(GPIOI_BSRR_PI);val |= (0x1 << 0);  writel(val, GPIOI_BSRR_PI);

(2)、能时钟。前面看了GPIOI在第八位

(3)、MODER的最后两位设为01.这个寄存器是设置IO的模式,最后两位是pin0,01是普通IO输出

(4)、OTYPER 的最后一位设置为0,这个寄存器是设置输出类型。只有低16位有效,对应不同的IO口。设为0是推挽模式

(5)、OSPEEDR 的最后两位设置为01,这个寄存器是设置IO口的输出速度。最后两位是pin0,10是高速。这个速度没测过是什么,网上说是翻转速度。

(6)、PUPDR 的最后两位设置为01,这个寄存器决定输出的是上拉还是下拉,也就是IO的默认电平。最后两位是pin0,01是上拉。我只知道输入上拉,这个输出上拉我是没搞懂,感觉应该是默认输出高电平吧

正点原子stm32MP157 点亮LED程序相关推荐

  1. dsp点亮led程序_点亮它:使用新的Windows 7功能的应用程序列表

    dsp点亮led程序 I'm digging Windows 7 more and more. So much so, that I'm watching out for apps that use ...

  2. 正点原子STM32MP157学习——1.开发环境及基本知识

    一.开发环境搭建 官方推荐使用VMWare15+Ubuntu18.04,之前自己做一些开发使用的VMWare+Ubuntu20.04,懒得重新安装,后续踩坑再填. 在Windows下需要安装STM32 ...

  3. 校园无线网条件下 实现正点原子stm32mp157教程中虚拟机、FTP、uboot的网络连接

    在正点原子的教程中网络连接使用的是交换机方式.我是学生,使用校园无线.这三步根本走不通.网上也似乎没什么相似案例,只能自己摸索,万幸花了一下午总算搞出来了.在校的学生学习这个板子的也应该不少,就把自己 ...

  4. 分享一个香橙派PC2的C语言点亮LED程序

    首先要编写字符设备驱动,代码大同小异,随便复制粘贴就行了. 但是要注意了,一定要保护好寄存器,不要乱搞,要不然系统崩了,就等着你妈妈喊你回家吃饭吧. led.c #include <linux/ ...

  5. 教你如何将正点原子stm32f103rc型号的板子程序改成stm32f03C8T6最小系统板

    相信很多一样初学者在这方面不懂得,接下来像我这样配置就好: 第一步:这里选好我们的C8T6最小系统板  第二步:这里建议改成8  第三步:这里记得改成"M"  最后就可以找到我们需 ...

  6. 正点原子STM32MP157开发板的一些错误和解决方法

    执行make menuconfig遇到错误 错误1 scripts/kconfig/Makefile:208: recipe for target 'scripts/kconfig/mconf-cfg ...

  7. IMAX6ULL正点原子学习笔记(led汇编驱动)

    参考资料:IMAX6ULL参考手册 1.使能时钟 参考手册中,Chapter 18​: Clock Controller Module (CCM),CCM_CCGRx(0~6)寄存器负责所有的外设时钟 ...

  8. 正点原子STM32通过蓝牙下载程序

    硬件,stm32芯片,蓝牙两个(本人使用bt-04),usb转串口 本人使用软件flymcu 实现步骤 1.蓝牙连接蓝牙 通过串口助手 AT指令 一个设置为主模式 另一个设置为从模式 2.实现串口下载 ...

  9. 【正点原子MP157连载】第二十四章 设备树下的LED驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

最新文章

  1. python中意外缩进是什么意思_与python中的“意外缩进”怎么办?
  2. php显示玩家,php.取得玩家IP
  3. php7 myrypt,nginx + php 配置
  4. C/C++添加设置任务计划
  5. centos7 卸载安装失败的mysql7
  6. 线路速度之实战***
  7. 阿里云ECS主机 Ubuntu下设置Mysql 5.7.17为远程访问
  8. 整型数组 java_java创建一个整型数组,数组的大小由用户输入?
  9. java小游戏跳棋_Java跳棋小游戏源代码
  10. leetcode【链表—中等】707.设计链表
  11. SWIG简介 | win10和Linux下的安装--亲测 | (一)
  12. mac安装php+mysql数据库_Mac环境下Nginx+PHP+MySQL的安装与配置
  13. Apollo星火计划学习笔记——Apollo速度规划算法原理与实践
  14. 两张表格数据匹配删除
  15. 记一次完整的用户测试
  16. 月份和星期的英语(请不要再弄错了)
  17. Activiti设置流程发起人用户信息
  18. centos解压与压缩zip格式文件
  19. linux qt5.7下打地鼠源程序,QT实现简单打地鼠游戏
  20. 区间dp--P1220关路灯

热门文章

  1. 【转】解决 Office 2007/2010 安装错误:1402
  2. Docker 换国内源(阿里云)
  3. FreeBSD12.1软件包管理工具pkg常见用法
  4. 2017湖南对口升学C语言答案,2017湖南对口升学计算机专业分数线
  5. QuickTime专业版 pro 注册码
  6. 系统光盘内容怎么考到计算机里,怎么把光盘内容复制到电脑上
  7. matlab如何导入txt和excel文件
  8. 基于反演法的悬架控制
  9. ASPICE-汽车软件过程改进及能力评定
  10. 可视库位电子纸广泛应用仓储管理