day62:ARMday9,I2c总线通信

2023-10-13 05:28
文章标签 通信 总线 i2c day62 armday9

本文主要是介绍day62:ARMday9,I2c总线通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作业:按键中断实现LED1、蜂鸣器、风扇

key_in.c:

#include "key_in.h"void gpio_init()
{//RCC使能//GPIOERCC->MP_AHB4ENSETR |= (0x1<<4);//GPIOBRCC->MP_AHB4ENSETR |= (0x1<<1);//PE10、PB6、PE9输出模式GPIOE->MODER &= ~(0x3<<20);GPIOE->MODER |= (0x1<<20);GPIOB->MODER &= ~(0x3<<12);GPIOB->MODER |= (0x1<<12);GPIOE->MODER &= ~(0x3<<18);GPIOE->MODER |= (0x1<<18);//推挽模式GPIOE->OTYPER &= ~(0x1<<10);GPIOB->OTYPER &= ~(0x1<<6);GPIOE->OTYPER &= ~(0x1<<9);//速度设置为低速GPIOE->OSPEEDR &= ~(0x3<<20);GPIOB->OSPEEDR &= ~(0x3<<12);GPIOE->OSPEEDR &= ~(0x3<<18);//设置为无上拉下拉电阻GPIOE->PUPDR &= ~(0x3<<20);GPIOB->PUPDR &= ~(0x3<<12);GPIOE->PUPDR &= ~(0x3<<18);}
void key_in_config()
{//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR |= (0x1<<5);//设置PF9 PF7 PF8管脚为输入模式GPIOF->MODER &= ~(0x3f<<14);//设置PF9 PF7 PF8发生EXTI事件 EXTI->EXTICR3 &= ~(0xff<<8);EXTI->EXTICR3 |= (0x05<<8);EXTI->EXTICR2 &= ~(0xff<<24);EXTI->EXTICR2 |= (0x05<<24);EXTI->EXTICR3 &= ~(0xff);EXTI->EXTICR3 |= (0x05);//设置EXTI中断触发模式为下降沿模式EXTI->FTSR1 |= (0x7<<7);//设置EXTI事件触发为不屏蔽EXTI->C1IMR1 |= (0x7<<7);//使能组0GICD->CTRL |= 0x1;//中断使能,使其可以传到CPUGICD->ISENABLER[3] |= (0x1<<3);GICD->ISENABLER[3] |= (0x1<<1);GICD->ISENABLER[3] |= (0x1<<2);//设置中断优先级GICD->IPRIORITYR[24] &= ~(0x1f<<27);GICD->IPRIORITYR[24] &= ~(0x1f<<11);GICD->IPRIORITYR[24] &= ~(0x1f<<19);//选择CPU处理中断GICD->ITARGETSR[24] &= ~(0x3<<24);GICD->ITARGETSR[24] |= (0x1<<24);GICD->ITARGETSR[24] &= ~(0x3<<8);GICD->ITARGETSR[24] |= (0x1<<8);GICD->ITARGETSR[24] &= ~(0x3<<16);GICD->ITARGETSR[24] |= (0x1<<16);//使能CPU处理转发的中断GICC->CTRL |= 0x1;//设置中断掩码GICC->PMR &= ~(0x1f<<3);GICC->PMR |= (0x5<<3);}

do_irq.c:

#include "key_in.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;void do_irq(void) 
{int irqno;static int i1=0,i2=0,i3=0;irqno = GICC->IAR & 0x3ff;switch(irqno){case 99:printf("KEY1 %d\n",irqno);i1++;//key1中断处理,LED1if(i1%2==1)GPIOE->ODR |= (0x1<<10);elseGPIOE->ODR &= ~(0x1<<10);//清除挂起中断标识位GICD->ICPENDR[3] |= (0x1<<3);//清除事情挂起标识位EXTI->FPR1 |= (0x1<<9);break;case 97:printf("KEY2 %d\n",irqno);i2++;//key2中断处理,蜂鸣器if(i2%2==1)GPIOB->ODR |= (0x1<<6);elseGPIOB->ODR &= ~(0x1<<6);//清除挂起中断标识位GICD->ICPENDR[3] |= (0x1<<1);//清除事情挂起标识位EXTI->FPR1 |= (0x1<<7);break;case 98:printf("KEY3 %d\n",irqno);i3++;//key3中断处理,风扇if(i3%2==1)GPIOE->ODR |= (0x1<<9);elseGPIOE->ODR &= ~(0x1<<9);//清除挂起中断标识位GICD->ICPENDR[3] |= (0x1<<2);//清除事情挂起标识位EXTI->FPR1 |= (0x1<<8);break;}//清除处理完的中断IAR到EOIRGICC->EOIR=irqno;
}

key_in.h:

#ifndef __KEY_IN_H__
#define __KEY_IN_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"void gpio_init();
void key_in_config();
#endif

main.c:

#include "key_in.h"int main()
{gpio_init();key_in_config();while(1){}return 0;
}

现象:

这篇关于day62:ARMday9,I2c总线通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201062

相关文章

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

基于C#实现MQTT通信实战

《基于C#实现MQTT通信实战》MQTT消息队列遥测传输,在物联网领域应用的很广泛,它是基于Publish/Subscribe模式,具有简单易用,支持QoS,传输效率高的特点,下面我们就来看看C#实现... 目录1、连接主机2、订阅消息3、发布消息MQTT(Message Queueing Telemetr

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

C++编程:ZeroMQ进程间(订阅-发布)通信配置优化

文章目录 0. 概述1. 发布者同步发送(pub)与订阅者异步接收(sub)示例代码可能的副作用: 2. 适度增加缓存和队列示例代码副作用: 3. 动态的IPC通道管理示例代码副作用: 4. 接收消息的超时设置示例代码副作用: 5. 增加I/O线程数量示例代码副作用: 6. 异步消息发送(使用`dontwait`标志)示例代码副作用: 7. 其他可以考虑的优化项7.1 立即发送(ZMQ_IM