正点原子stm32MP157 点亮LED程序
学习正点原子开发板,发现点亮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程序相关推荐
- 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 ...
- 正点原子STM32MP157学习——1.开发环境及基本知识
一.开发环境搭建 官方推荐使用VMWare15+Ubuntu18.04,之前自己做一些开发使用的VMWare+Ubuntu20.04,懒得重新安装,后续踩坑再填. 在Windows下需要安装STM32 ...
- 校园无线网条件下 实现正点原子stm32mp157教程中虚拟机、FTP、uboot的网络连接
在正点原子的教程中网络连接使用的是交换机方式.我是学生,使用校园无线.这三步根本走不通.网上也似乎没什么相似案例,只能自己摸索,万幸花了一下午总算搞出来了.在校的学生学习这个板子的也应该不少,就把自己 ...
- 分享一个香橙派PC2的C语言点亮LED程序
首先要编写字符设备驱动,代码大同小异,随便复制粘贴就行了. 但是要注意了,一定要保护好寄存器,不要乱搞,要不然系统崩了,就等着你妈妈喊你回家吃饭吧. led.c #include <linux/ ...
- 教你如何将正点原子stm32f103rc型号的板子程序改成stm32f03C8T6最小系统板
相信很多一样初学者在这方面不懂得,接下来像我这样配置就好: 第一步:这里选好我们的C8T6最小系统板 第二步:这里建议改成8 第三步:这里记得改成"M" 最后就可以找到我们需 ...
- 正点原子STM32MP157开发板的一些错误和解决方法
执行make menuconfig遇到错误 错误1 scripts/kconfig/Makefile:208: recipe for target 'scripts/kconfig/mconf-cfg ...
- IMAX6ULL正点原子学习笔记(led汇编驱动)
参考资料:IMAX6ULL参考手册 1.使能时钟 参考手册中,Chapter 18: Clock Controller Module (CCM),CCM_CCGRx(0~6)寄存器负责所有的外设时钟 ...
- 正点原子STM32通过蓝牙下载程序
硬件,stm32芯片,蓝牙两个(本人使用bt-04),usb转串口 本人使用软件flymcu 实现步骤 1.蓝牙连接蓝牙 通过串口助手 AT指令 一个设置为主模式 另一个设置为从模式 2.实现串口下载 ...
- 【正点原子MP157连载】第二十四章 设备树下的LED驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
最新文章
- python中意外缩进是什么意思_与python中的“意外缩进”怎么办?
- php显示玩家,php.取得玩家IP
- php7 myrypt,nginx + php 配置
- C/C++添加设置任务计划
- centos7 卸载安装失败的mysql7
- 线路速度之实战***
- 阿里云ECS主机 Ubuntu下设置Mysql 5.7.17为远程访问
- 整型数组 java_java创建一个整型数组,数组的大小由用户输入?
- java小游戏跳棋_Java跳棋小游戏源代码
- leetcode【链表—中等】707.设计链表
- SWIG简介 | win10和Linux下的安装--亲测 | (一)
- mac安装php+mysql数据库_Mac环境下Nginx+PHP+MySQL的安装与配置
- Apollo星火计划学习笔记——Apollo速度规划算法原理与实践
- 两张表格数据匹配删除
- 记一次完整的用户测试
- 月份和星期的英语(请不要再弄错了)
- Activiti设置流程发起人用户信息
- centos解压与压缩zip格式文件
- linux qt5.7下打地鼠源程序,QT实现简单打地鼠游戏
- 区间dp--P1220关路灯