ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)

news2025/1/31 10:57:55

1.目标:

        a.数码管显示相同的值 0000 1111 ......9999;
        b.数码管显示不同的值 1234;

2.分析m74hc595芯片内部框图;

 真值表:

3.代码;

---spi.h头文件---
#ifndef __SPI_H__
#define __SPI_H__

#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"

// MOSI对应的引脚输出高低电平的信号
#define  MOSI_OUTPUT_H()	do{GPIOE->ODR |= (0x1 << 14);}while(0)
#define  MOSI_OUTPUT_L()    do{GPIOE->ODR &= (~(0x1 << 14));}while(0)

// 对应595芯片的锁存引脚输出高低电平
#define  NSS_OUTPUT_H()	    do{GPIOE->ODR |= (0x1 << 11);}while(0)
#define  NSS_OUTPUT_L()     do{GPIOE->ODR &= (~(0x1 << 11));}while(0)
	
// 时钟信号对应的引脚输出高低电平
#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);


#endif  // __SPI_H__
---spi.c函数文件---
#include "spi.h"
/* SPI4_NSS 	---->   PE11
 * SPI4_SCK     ---->   PE12
 * SPI4_MOSI    ---->   PE14
 * SPI4_MISO    ---->   PE13
 * */

/* 数码管的编码, 先发送低位,在发送高位
 * A B C D E F G DP
 * 1 1 1 1 1 1 0 0    0xFC   0
 * 0 1 1 0 0 0 0 0    0x60   1
 * 1 1 0 1 1 0 1 0    0xDA   2
 * 1 1 1 1 0 0 1 0    0xF2   3
 * 0 1 1 0 0 1 1 0    0x66   4
 * 1 0 1 1 0 1 1 0    0xB6   5 
 * 1 0 1 1 1 1 1 0    0xBE   6
 * 1 1 1 0 0 0 0 0    0xE0   7
 * 1 1 1 1 1 1 1 0    0xFE   8
 * 1 1 1 1 0 1 1 0    0xF6   9
 * */
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)
{
	RCC->MP_AHB4ENSETR |= (0x1 << 4);
	// MOSI    PE14 
	GPIOE->MODER &= (~(0x3 << 28));
	GPIOE->MODER |= (0x1 << 28);
	GPIOE->OTYPER &= (~(0x1 << 14));
	GPIOE->OSPEEDR &= (~(0x3 << 28));
	GPIOE->PUPDR &= (~(0x3 << 28));
	// MISO    PE13
	GPIOE->MODER &= (~(0x3 << 26));
	GPIOE->OSPEEDR &= (~(0x3 << 26));
	GPIOE->PUPDR &= (~(0x3 << 26));
	// SCK     PE12	
	GPIOE->MODER &= (~(0x3 << 24));
	GPIOE->MODER |= (0x1 << 24);
	GPIOE->OTYPER &= (~(0x1 << 12));
	GPIOE->OSPEEDR &= (~(0x3 << 24));
	GPIOE->PUPDR &= (~(0x3 << 24));
	// NSS     PE11
	GPIOE->MODER &= (~(0x3 << 22));
	GPIOE->MODER |= (0x1 << 22);
	GPIOE->OTYPER &= (~(0x1 << 11));
	GPIOE->OSPEEDR &= (~(0x3 << 22));
	GPIOE->PUPDR &= (~(0x3 << 22));
	NSS_OUTPUT_L();    // 595芯片的锁存引脚拉低
	SCK_OUTPUT_L();    // SPI的时钟线拉低
}

void SPI_write(unsigned char dat)
{
	//1.for循环 
	unsigned char i;
	for(i=0; i<8; i++)
	{
		if(dat & 0x01)	//先发低位,再发高位
			MOSI_OUTPUT_H();  //发1
		else
			MOSI_OUTPUT_L();  //发0
		
		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++);
}


int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};

int main()
{
	SPI_init();

	//实验1:0000 1111 .... 9999
	unsigned char i;

	while(1)
	{
	/*	for(i=0; i<10; i++)	
		{
			//循环条
			SPI_write(0xF0);   //传位
			SPI_write(num[i]);   //传段

			//锁存时钟上升沿,锁存器数据才会变化
			NSS_OUTPUT_L();
			delay_ms(10);
			NSS_OUTPUT_H();
			delay_ms(10);
		}

		*/
		
/        /实验2:1234
		for(i=0; i<4; i++)
		{
			SPI_write(0x80 >> i);
			SPI_write(num[i+1]);

			//锁存时钟上升沿,锁存器数据才会变化
			NSS_OUTPUT_L();
			delay_ms(1);
			NSS_OUTPUT_H();

		}
	}
	return 0;

}

4.运行结果;

a.数码管显示相同的值 0000 1111 ......9999;

b.数码管显示不同的值 1234;

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

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

相关文章

Oracle的学习心得和知识总结(二十八)|Oracle数据库数据库回放功能之论文二翻译及学习

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

湘潭大学 湘大 XTU OJ 1271 Color 题解(非常详细)

链接 1271 题面 题目描述 Alice在玩一个游戏&#xff0c;她在一个mn的格子里&#xff0c;随机涂黑k个格子。然后她每次可以把一行或者一列的格子染成红色&#xff0c;但是这一行中不能有黑色的格子。 请问她最多能把多少个格子涂成红色&#xff1f; 输入 第一行是一个整数…

低代码平台:开发应用程序的新革命

一、前言 在传统的软件开发交付链中&#xff0c;需求经过多次传递&#xff0c;往往造成需求失真和功能返工。然而&#xff0c;随着业务的不断变化&#xff0c;低代码开发作为软件开发的新兴分支&#xff0c;呈现出高效、灵活和稳定的特点&#xff0c;为企业提供了解决方案。 在…

MAC电脑外放没有声音解决方案

烦人呐&#xff0c;我的mac外接显示屏幕&#xff0c;显示器没有音频输出&#xff0c;需要mac笔记本的音频输出&#xff0c;但是经常打开后&#xff0c;mac没有声音输出&#xff0c;需要重启电脑才能生效。亲测一下方法有效&#xff0c;请参考&#xff1a; 文章目录 一、短期方案…

Java的类加载顺序

加载、验证、准备、解析和初始化。 加载 “加载”(Loading)阶段是“类加载”(Class Loading)过程的第一个阶段&#xff0c;在此阶段&#xff0c;虚拟机需要完成以下三件事情&#xff1a; 通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构…

CentOS8中使用yum命令出现错误提示:为仓库 ‘appstream‘ 下载元数据失败

需求 最近安装了虚拟机并配置了CentOS8&#xff0c;然后打算继续安装WEB服务环境 科普 yum是一个命令行工具&#xff0c;可以在Linux系统下帮助我们方便地管理软件包&#xff08;包括安装、卸载、检查更新等操作&#xff09;&#xff0c;yum install命令的作用是在系统上安装…

很干的 Nginx

&#x1f3a8; 前言 本篇文章有些概念性的东西&#xff0c;是结合自己的理解表达出来的&#xff0c;可能有些理解不到位的地方。希望多多指教&#xff0c;谢谢大家。 红包献上 &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;…

解决idea登录github copilot报错问题

试了好多方案都没用&#xff0c;但是这个有用&#xff0c; 打开idea-help-edit custonm vm options 然后在这个文件里面输入 -Dcopilot.agent.disabledtrue再打开 https://github.com/settings/copilot 把这个设置成allow&#xff0c;然后重新尝试登录copilot就行就行 解决方…

【java安全】JNDI注入概述

文章目录 【java安全】JNDI注入概述什么是JNDI&#xff1f;JDNI的结构InitialContext - 上下文Reference - 引用 JNDI注入JNDI & RMI利用版本&#xff1a;JNDI注入使用Reference 【java安全】JNDI注入概述 什么是JNDI&#xff1f; JNDI(Java Naming and Directory Interf…

开源许可证解析:从MIT到GPL

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

kafka复习:(11)auto.offset.reset的默认值

在ConsumerConfig这个类中定义了这个属性的默认值&#xff0c;如下图 也就是默认值为latest,它的含义是&#xff1a;如果没有客户端提交过offset的话&#xff0c;当新的客户端消费时&#xff0c;把最新的offset设置为当前消费的offset. 默认是自动提交位移的&#xff0c;每5秒…

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码

基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黄金正弦优化BP神经网络2.1 BP神经网络参数设置2.2 黄金正弦算法应用 4.测试结果&#xff1a;5…

5个产品经理必看的交互软件,高保真原型必备

今天本文将给大家分享5个产品小白也能轻松上手使用的交互软件&#xff0c;帮助大家更快地做出具有高保真效果的原型图&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时设计是一个来自国内的交互软件&#xff0c;因此无论是在设计过程&#xff0c;还是使用体验方面&…

基于swing的图书借阅系统java jsp书店进销存mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的图书借阅系统 系统有2权限&#xff1a;管…

GPS坐标转换并实时显示轨迹

文章目录 下载数据集创建功能包主要代码使用 下载数据集 链接: https://pan.baidu.com/s/1zSXyNhMNQdaFlDFziDse1Q 密码: 6j6u 其中话题/gps/fix和/imu_correct分别为sensor_msgs/NavSatFix类型的gps数据和sensor_msgs/Imu类型的imu数据 查看相关话题信息 创建功能包 cat…

MySQL 8.0 的工具日志配置管理

文章目录 日志分类设置错误日志设置错误日志等级生效时间 二进制日志&#xff08;binlog&#xff09;作用配置 慢日志&#xff08;slow_log&#xff09;作用 general_log 业务sql 日志分类 error log &#xff1a; 错误日志 genernal log &#xff1a; 普通日志 binlog &#…

香港开启创科「黄金时代」,企业如何乘势高飞?

文 | 智能相对论 作者 | 范柔丝 以“Made in Hong Kong&#xff08;香港制造&#xff09;”为标志的香港工业&#xff0c;在历经了辉煌与式微之后&#xff0c;近几年&#xff0c;在高质量发展、创新科技引领之下&#xff0c;迎来“再工业化”的契机。 特区政府在2022年12月公…

什么是通达信程序接口?运用哪些源代码?

在股市里提及的通达信程序接口&#xff08;TDXAPI&#xff09;是获取个股行情数据的分析系统&#xff0c;用户可以通过编程语言调用接口&#xff0c;获取实时行情数据、历史行情数据、板块数据等&#xff0c;进而进行自定义的行情分析、股票筛选、交易决策等操作。 例如开发数…

uniapp上传图片 (uni-file-picker)

使用的是uniapp官方文档扩展组件 点击跳转 下面代码中详细参数请点击官方文档查看 <template><view><uni-file-pickerv-model"imageValue" fileMediatype"image" mode"grid"limit"1"select"select"progre…