spi_2024.1.2

spi.h

#ifndef __SPI_H__
#define __SPI_H__#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"#include"uart4.h"
#include"key_it.h"
// MOSI对应的引脚输出高低电平的信号PE14
#define  MOSI_OUTPUT_H()    do{GPIOE->ODR |= (0x1 << 14);}while(0)
#define  MOSI_OUTPUT_L()    do{GPIOE->ODR &= (~(0x1 << 14));}while(0)// 对应595芯片的锁存引脚输出高低电平  PE11
#define  NSS_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 11);}while(0)
#define  NSS_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 11));}while(0)// 时钟信号对应的引脚输出高低电平  PE12
#define  SCK_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 12);}while(0)
#define  SCK_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 12));}while(0)/** 函数功能: SPI初始化函数,推挽输出,高速,禁止上拉和下拉* 函数参数:无* 函数返回值:无
*/
void SPI_init(void);
/** 函数功能:SPI发送数据的函数* 函数参数:dat : 要发送的数据* 函数返回值:无*
*/
void SPI_write(unsigned char dat);
void delay_ms(int ms);
void bian();
#endif

spi.c

#include"spi.h"void delay_us1(unsigned int us)
{int i,j;for(i=0;i<us;i++){for(j=0;j<1;j++);}
}
void SPI_init(void)
{//1.使能GPIOE时钟RCC->MP_AHB4LPENSETR |=(0X1<<4);//2.MOSI管脚PE14 设置输出的属性GPIOE->MODER &=(~(0X3<<28));GPIOE->MODER |=(0X1<<28);GPIOE->OTYPER &=(~(0X1<<14));GPIOE->OSPEEDR &=(~(0X3<<28));GPIOE->PUPDR &=(~(0X3<<28));//3.MISO管脚PE13 设置输入的属性GPIOE->MODER &=(~(0X3<<26));  GPIOE->OSPEEDR &=(~(0X3<<26));GPIOE->PUPDR &=(~(0X3<<26));//4.SCK管脚PE12  设置输出的属性GPIOE->MODER  &=(~(0x3<<24));GPIOE->MODER  |=(0x1<<24);GPIOE->OTYPER &=(~(0X1<<12));GPIOE->OSPEEDR &=(~(0X3<<24));GPIOE->PUPDR &=(~(0X3<<24));//5.RCK(NSS)管脚PE11 设置输出的属性GPIOE->MODER  &=(~(0X3<<22));GPIOE->MODER  |=(0X1<<22);GPIOE->OTYPER &=(~(0X1<<11));GPIOE->OSPEEDR &=(~(0X3<<22));GPIOE->PUPDR &=(~(0X3<<22));//默认PE12和PE11输出低电平,方便产生上升沿NSS_OUTPUT_L();SCK_OUTPUT_L();}void SPI_write(unsigned char dat)
{int i;for(i=0;i<8;i++){if(dat&0X01){//输出高电平MOSI_OUTPUT_H();}else{//输出低电平MOSI_OUTPUT_L();}dat >>= 1;//产生上升沿SCK_OUTPUT_L();delay_us1(10);SCK_OUTPUT_H();delay_us1(10);}}

main.c

#include "spi.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);}   void bian(){NSS_OUTPUT_L();delay_ms(1);NSS_OUTPUT_H();delay_ms(1000);}//保存0-9编码的数组int main(void){//unsigned char i;SPI_init();while(1){// 发送数码管的位 SPI_write(0X80);SPI_write(0XFC);bian();SPI_write(0X40);SPI_write(0XF2);bian();SPI_write(0X20);SPI_write(0X3e);bian();SPI_write(0X10);SPI_write(0XF6);bian();}return 0;}

spi.h(加了key_it.h)

#ifndef __SPI_H__
#define __SPI_H__#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"#include"uart4.h"
#include"key_it.h"
// MOSI对应的引脚输出高低电平的信号PE14
#define  MOSI_OUTPUT_H()    do{GPIOE->ODR |= (0x1 << 14);}while(0)
#define  MOSI_OUTPUT_L()    do{GPIOE->ODR &= (~(0x1 << 14));}while(0)// 对应595芯片的锁存引脚输出高低电平  PE11
#define  NSS_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 11);}while(0)
#define  NSS_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 11));}while(0)// 时钟信号对应的引脚输出高低电平  PE12
#define  SCK_OUTPUT_H()     do{GPIOE->ODR |= (0x1 << 12);}while(0)
#define  SCK_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 12));}while(0)/** 函数功能: SPI初始化函数,推挽输出,高速,禁止上拉和下拉* 函数参数:无* 函数返回值:无
*/
void SPI_init(void);
/** 函数功能:SPI发送数据的函数* 函数参数:dat : 要发送的数据* 函数返回值:无*
*/
void SPI_write(unsigned char dat);
void delay_ms(int ms);
void bian();
#endif

main.c

#include "spi.h"#include"key_it.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i,j;for(i = 0; i < ms;i++)for (j = 0; j < 1800; j++);}   //保存0-9编码的数组int main(void){SPI_init();key1_it_config();key2_it_config();key3_it_config();//unsigned char i;while(1){// 发送数码管的位 printf("do_main.....\n");delay_ms(1000);}return 0;}

spi.c

同上

do_irq.c

#include"led.h"
#include"spi.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void bian()
{NSS_OUTPUT_L();delay_ms(1);NSS_OUTPUT_H();delay_ms(1000);
}
void do_irq(void) 
{int irqno=(GICC->IAR &0X3FF);switch(irqno){case 99:{printf("im key1\n");SPI_write(0X80);SPI_write(0XFC);bian();SPI_write(0X20);SPI_write(0X3e);bian();GICD->ICPENDR[3] |=(0X1<<3);EXTI->FPR1 |=(0X1<<9);led1_off();}break;case 98:{printf("im key3\n");SPI_write(0X40);SPI_write(0XF2);bian();GICD->ICPENDR[3] |=(0X1<<2);EXTI->FPR1 |=(0X1<<8);}break;case 97: {printf("im key2\n");SPI_write(0X10);SPI_write(0XF6);bian();GICD->ICPENDR[3] |=(0X1<<1);EXTI->FPR1 |=(0X1<<7);}break;}GICC->EOIR=irqno;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/601175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linkage Mapper 工具参数详解——Climate Linkage Mapper

从以下链接中获取内容&#xff08;识别二维码、填写问卷、获取联系方式&#xff09; Linkage Mapper 报错_python error on **line 806** of lm_util.py in link-CSDN博客 此工具涉及参数非常多&#xff0c;后台需调用其他GIS平台&#xff08;并且限定版本&#xff09;&#x…

手写视频裁剪框

<!-- 截取框 --><divv-show"isShow"class"crop-box":style"{width: cropWidth px,height: cropHeight px,left: cropX px,top: cropY px,}"ref"cropBox"mousedown"startInteraction"><!-- 内容在这里 --…

【AI视野·今日CV 计算机视觉论文速览 第280期】Mon, 1 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 1 Jan 2024 Totally 46 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning Vision from Models Rivals Learning Vision from Data Authors Yonglong Tian, Lijie Fan, Kaifeng Chen, Dina K…

React-hook-form-mui(一):基本使用

前言 在项目开发中&#xff0c;我们选择了ReactMUI作为技术栈。在使用MUI构建form表单时&#xff0c;我们发现并没有与antd类似的表单验证功能&#xff0c;于是我们选择了MUI推荐使用的react-hook-form-mui库去进行验证。但是发现网上关于这个库的使用方法和demo比较少且比较简…

二、类与对象(四)

22 内部类 22.1 内部类的概念 如果一个类定义在另一个类的内部&#xff0c;这个类就叫做内部类。内部类是一个独立的类&#xff0c;它不属于外部类&#xff0c;更不能通过外部类的对象去访问内部类的成员&#xff0c;外部类对内部类没有任何优越的访问权限&#xff0c;也就是…

LINUX基础培训之开机启动过程

前言、本章学习目标 掌握系统启动、引导过程 了解grub.conf的参数设置 熟悉系统运行级别 了解加载内核过程 一、LINUX启动引导过程 Linux系统的启动过程并不是大家想象中的那么复杂&#xff0c;其过程可以分为5个阶段&#xff1a; 1.开机自检 服务器主机开机以后&#xf…

5.SolidWorks的学习心法

学习计算机辅助设计软件&#xff08;CAD-Computer Aided Design&#xff09;的很重要的一点&#xff0c;就是要想清楚计算机辅助设计软件的本质和作用是什么。这一点非常重要&#xff0c;如果没有想清楚这一点&#xff0c;总会感觉得没有软件就做不了设计了&#xff0c;甚至是没…

LeetCode 2610. 转换二维数组【数组,哈希表】1373

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Spring Beans的魔法门:解密多种配置方式【beans 四】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Spring Beans的魔法门&#xff1a;解密多种配置方式【beans 四】 前言XML配置方式1. 声明和配置Bean&#xff1a;2. 构造函数注入&#xff1a;3. 导入其他配置文件&#xff1a; java注解方式1. 使用Co…

算法训练营Day35

#Java #动态规划 开源学习资料 Feeling and experiences&#xff1a; 不同路径&#xff1a;力扣题目链接 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右…

MyBatisPlus学习三:Service接口、代码生成器

学习教程 黑马程序员最新MybatisPlus全套视频教程&#xff0c;4小时快速精通mybatis-plus框架 Service接口 简介 在MyBatis-Plus框架中&#xff0c;Service接口的作用是为实体类提供一系列的通用CRUD&#xff08;增删改查&#xff09;操作方法。通常情况下&#xff0c;Servi…

PyTorch 入门学习数据操作之创建

简介 在深度学习中&#xff0c;我们通常会频繁地对数据进行操作&#xff1b;要操作一般就需要先创建。 官方介绍 The torch package contains data structures for multi-dimensional tensors and defines mathematical operations over these tensors. Additionally, it pr…

k8s-二进制部署

ETCD master节点 制作证书 1、下载证书工具 [rootmaster ~]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 --no-check-certificate [rootmaster ~]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 --no-check-certificate [rootmaster ~]# wget https://…

SpringMVC通用后台管理系统源码

整体的SSM后台管理框架功能已经初具雏形&#xff0c;前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器&#xff0c;轻松实现系统调度问…

【源码解析】Apache RocketMQ发送消息源码

send message源码解析 引入 send message方法作为我们经常使用的方法&#xff0c;平时我们很难去关注他底层到底做了什么。大部分人只知道通过send message方法可以将消息发送到broker&#xff0c;然后供消费者进行消费。其实不然&#xff0c;消息从客户端发送到broker&#x…

ssm基于vue.js的购物商场的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装购物商场软件来发挥其高效地信息处理的作用&#xff0c;可以…

Spring Cloud Bus 相关问题及答案(2024)

1、什么是 Spring Cloud Bus&#xff1f; Spring Cloud Bus 是建立在 Spring Cloud 的基础之上&#xff0c;用于处理微服务架构中各服务实例间消息通信的框架。它与 Spring Cloud Config 结合使用时&#xff0c;可以提供一种动态刷新配置的能力&#xff0c;不需要重启服务实例…

阿里云服务器配置选择推荐方案

阿里云服务器配置怎么选择合适&#xff1f;CPU内存、公网带宽和ECS实例规格怎么选择合适&#xff1f;阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择&#xff0c;例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…

cissp 第10章 : 物理安全要求

10.1 站点与设施设计的安全原则 物理控制是安全防护的第一条防线&#xff0c;而人员是最后一道防线。 10.1.1 安全设施计划 安全设施计划通过关键路径分析完成。 关键路径分析用于找出关键应用、流程、运营以及所有必要支撑元索间的关系。 技术融合指的是各种技术、解决方案…

性能优化-OpenMP基础教程(三)

本文主要介绍OpenMP并行编程的环境变量和实战、主要对比理解嵌套并行的效果。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &…