【排错记录】国产航顺HK32F030M驱动TM1624四位数码管显示

news2024/9/23 9:30:03

在这里插入图片描述
在这里插入图片描述

问题描述:

航顺单片机 HK32F030MF4P6用数码管显示驱动TM1624问题描述。

  1. 航顺单片HK32F030MF4P6的PC3/PC4/PC5引脚分别连接数码管驱动TM1624的DIN/CLK/STB;
  2. 当单独使用HK32F030MF4P6单片机最小系统和TM1624数码管模块的时候部分最小系统板能驱动数码管正常显示,而有的最小系统板最需要修改系统时钟后才能驱动数码管显示(如下图所示);
  3. 当单片机和数码管驱动集成在一块电路板上时数码管不能正常显示;

在这里插入图片描述

问题原因: STM32 GPIO工作原理

GPIO端口8个输入/输出模式

typedef enum
{ GPIO_Mode_AIN = 0x0,//模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
  GPIO_Mode_IPD = 0x28,//下拉输入
  GPIO_Mode_IPU = 0x48,//上拉输入
  
  GPIO_Mode_Out_OD = 0x14,//开漏输出
  GPIO_Mode_Out_PP = 0x10, //推挽式输出
  GPIO_Mode_AF_OD = 0x1C,//开漏复用输出
  GPIO_Mode_AF_PP = 0x18//推挽复用输出
}GPIOMode_TypeDef;

GPIO端口7个寄存器:
2 个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)
- 端口配置低位寄存器 GPIOx_CRL
- 端口配置高位寄存器 GPIOx_CRH
2 个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)
- 端口输入数据寄存器 GPIOx_IDR
- 端口输出数据寄存器 GPIOx_ODR
1 个32位置位/复位寄存器(GPIOx_BSRR)
1 个16位复位寄存器(GPIOx_BRR)
1 个32位锁定寄存器(GPIOx_LCKR)

解决方案:

GPIO_SetBits(GPIOC,GPIO_Pin_5); 替换 GPIOC->ODR=1<<5; //STB置高 PC5

GPIO_ResetBits(GPIOC,GPIO_Pin_5); 替换 GPIOC->ODR=0<<5;
//STB置低 PC5

#include "tm1624.h"


const unsigned char  ledsw[11] = {0x00,0x01,0x02,0x06,0x0E,0x1E,0x03,0x07,0x0F,0x1F};				//亮灯个数ledsw[0/1/6/7/8/9]   亮5颗灯:ledsw[9]=0x1F=0001 1111 
const unsigned char  CODE[25]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0xBF,0X86,0XDB,0XCF,0XE6,0XED,0XFD,0X87,0XFF,0XEF,
0x71,   //20 -- 'F'    CODE[20]=0X71
0x77,   //21 -- 'A'
0x3E,   //22 -- 'U'   
0X40,   //23 -- ‘-’    CODE[23]=0X40=0100 0000 (dp-'G'-F-E-D-C-B-A)
0X00,   //无 24
};  //共阴数码管0~9 FHU字型码{0xBF,0X86,0XDB,0XCF,0XE6,0XED.0XFD,0X87,0XFF,0XEF}


/*
s[0] = 11   即CODE[11]  -> 0X86 -> 数字‘1’
s[1] = 12
s[2] = 13
s[3] = 14

CODE[s[0]]
CODE[s[1]]
CODE[s[2]]
CODE[s[3]]
*/


static void delay(unsigned int j)
{
  unsigned int i;
  for(i=0;i<j;i++)
  {
//				__NOP;
  }
}
//1624初始化函数
void TM1624_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_HCLKConfig(RCC_SYSCLK_Div1); // AHB
	RCC_PCLKConfig(RCC_HCLK_Div1);   //APB
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);	//使能GPIOC时钟
//	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);	//使能GPIOD时钟
	//输出配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_1;
	
	//PC3-4-5输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;  // (DIN PC3)  CLK PC4 STB PC5 
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
//	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;  // DIN PD3  
//	GPIO_Init(GPIOD, &GPIO_InitStructure);
}

//发送8bit数据,从低位开始
//参数 dat对应数据
static void send_8bit(unsigned char dat)	//发送8bit数据,从低位开始
{
  unsigned char i;
  
  for(i=0;i<8;i++)
  {	
//  	GPIOC->ODR=0<<4;         // PC4 CLK  低
		GPIO_ResetBits(GPIOC,GPIO_Pin_4);
		if(dat&0x01) 
//			GPIOC->ODR=1<<3;     // PC3 DIN  高
			GPIO_SetBits(GPIOC,GPIO_Pin_3);


		else     
//        GPIOC->ODR=0<<3;     // PC3 DIN  低
		GPIO_ResetBits(GPIOC,GPIO_Pin_3);

//	delay(1);
//	softWareDelay(10);
//	GPIOC->ODR=1<<4;					 // PC4 CLK  高 1bit数据在时钟的上升沿操作
		GPIO_SetBits(GPIOC,GPIO_Pin_4);

	  dat >>= 1;	 
  }
//  GPIOC->ODR=0<<4;           // PC4 CLK  低
//  GPIOC->ODR=0<<3;					 // PC3 DIN  低
	  GPIO_ResetBits(GPIOC,GPIO_Pin_4);
    GPIO_ResetBits(GPIOC,GPIO_Pin_3);

}

static void send_command(unsigned char cmd)  //发送命令字节
{ 
//   GPIOC->ODR=1<<5;					  //STB置高 PC5 
		GPIO_SetBits(GPIOC,GPIO_Pin_5);
//   delay(1);
//	 softWareDelay(10);
//   GPIOC->ODR=0<<5;					  //STB置低  
		GPIO_ResetBits(GPIOC,GPIO_Pin_5);
    send_8bit(cmd);			      //发送8bit数据

}

//1624刷新函数
//功能 设置数码管显示的数字和led显示个数
//参数 *s要显示的数字 *led要显示的led 
//返回 void
//调度周期 5ms
void digital_display_update(unsigned char *s,unsigned char *led)   //????,1~4??????0~9
{
    send_command(0x02); 	      //显示模式设置(00):6位12段模式(10)             (即:00 ---- 10)   
    send_command(0x40);	        //数据命令设置(01):测试模式设置为普通模式(0)--地址模式设置为地址自加(0)--读写模式(00)     (即:01 -- 0 0 00)
    send_command(0xC0);	        //地址设定(11):设置显示模式,从00H开始(0000)   (即:11 -- 0000)             
 
    send_8bit(CODE[s[0]]);     //第一个数码管grid1          digital_tmp[0] = 22 / 20 / 21 /24   即CODE[23]=0X40=0100 0000 (dp-'G'-F-E-D-C-B-A)
    send_8bit(0x00);           //grid1 高字节 seg9-seg14
    
    send_8bit(CODE[s[1]]);     //第二个数码管gid2
    send_8bit(0x00);           //grid2 高字节 seg9-seg14  

    send_8bit(CODE[s[2]]);     //第三个数码管
    send_8bit(0x00);           //grid3 高字节 seg9-seg14   
    
		send_8bit(CODE[s[3]]);     //第四个数码管
    send_8bit(0x00);           //grid3 高字节 seg9-seg14   
    
    send_8bit(ledsw[led[0]]);   //  YG1-YG5  左侧功率显示LED   led_tmp[0] = 0 / 1 / 6 / 7 / 8 / 9 例亮5颗灯:ledsw[9]=0x1F=0001 1111 
    send_8bit(0x00);            //  grid3 高字节 seg9-seg14
    
	  send_8bit(ledsw[led[1]]);   // YG6-YG10 右侧燃油显示LED
    send_8bit(0x00);            // grid3  seg9-seg14
																// 清空显示RAM(对所有RAM写0)
    send_command(0x8F);	        //显示控制指令设置(10),打开显示(1)并设置占空比14/16 (010) (即:10 -- 1 010)
//    GPIOC->ODR=1<<5;
}


参考资料

  • [1] 国产航顺HK32F030M:TM1624四位数码管驱动显示
  • [2] STM32入门笔记(02): GPIO工作原理、 GPIO通用和AFIO复用功能 I/O(SPL库函数版)

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

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

相关文章

Centos 7 安装系列(11):Kibana

一、系统环境 操作系统&#xff1a;Centos 7 已安装环境&#xff1a;ElasticSearch 8.6.2 二、安装 需要注意的是&#xff1a;Kibana的版本需要和Elasticsearch保持一致。 2.1 下载并解压安装包 cd /opt yum install -y wget wget https://artifacts.elastic.co/downloads…

马哈鱼SQLFLow对SQL Server OUTPUT Clause 的数据血缘分析

SQL Server OUTPUT Clause 会对 SQL 语句的血缘分析产生影响&#xff0c;如果忽略对 OUTPUT Clause 的分析&#xff0c;那么将漏掉一些关键的数据血缘关系&#xff0c;从而影响数据血缘分析的准确性&#xff0c;进而影响组织的数据治理质量。 Gudu SQLFlow 可以对 SQL Server …

Linux下安装MySQL 5.7

安装MySQL 5.7 1、通过命令下载 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz 2、解压 tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql/ 3、简化 cd /usr/local mv mysql-5.7.36-linux-…

Hibernate 基本操作、懒加载以及缓存

前言 上一篇咱们介绍了 Hibernate 以及写了一个 Hibernate 的工具类&#xff0c;快速入门体验了一波 Hibernate 的使用&#xff0c;我们只需通过 Session 对象就能实现数据库的操作了。 现在&#xff0c;这篇介绍使用 Hibernate 进行基本的 CRUD、懒加载以及缓存的知识。 提示…

干货|做实验到底应该选取多少被试?

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 我们都知道心理学实验一般是通过分析被试的一系列数据从而得到相应的结论的。那么&#xff0c;在进行心理学实验的时候需要多少被试&#xff1f;怎么去看实验的被试量够不够呢&#xff1f;…

【Spring Cloud】Spring Cloud Alibaba 实战 Seata (分布式事务)

文章目录 一、Seata 简介简要发展史Seata 设计初衷 二、使用 Docker 快速搭建 Seata 1.4三、在 Spring 项目中使用 Seata 客户端 一、Seata 简介 Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09; 是一款开源的分布式事务解决方案&#xf…

Datawhale-chatGPT用于句词分类

NLU基础 句子级别的分类 Token级别的分类 相关API chatGPT Style prompt建议 NLU应用 文档问答 分类/实体微调 智能对话

php xdebug配置

1.sublime 火绒 火绒安装插件Xdebug Helper for Firefox 管理插件 -…-选项 填入ide key sublime 第一个插件package control ctrlshifitp 输入install 点击安装第一个包管理 package control 第二个插件 xdebug ctrlshifitp 输入xdebug clinet安装 php配置 这里用的时phps…

网安笔记03 DES概述

DES 概述 分组加密算法 &#xff1a; 明文、密文64位分组长度对称算法 &#xff1a; 加密和解密密钥编排不同&#xff0c;但使用同一算法密钥长度&#xff1a;56位 —— 每个第8位为奇偶校验位密钥为任意的56位数&#xff0c;存在 弱密钥&#xff0c; 容易避开混乱与扩散的组合…

初学者自学Web安全的三个必经阶段(含系统路线脑图+工具笔记)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

React学习1

JSX使得创建虚拟DOM更便捷&#xff0c;纯JS创建虚拟DOM太过繁琐 JSX语法规范&#xff1a; JSX的{}&#xff0c;读变量的时候只能存放表达式&#xff0c;不能写语句&#xff08;代码&#xff09; react可以遍历数组&#xff0c;但是无法遍历对象 react是面向组件编程 函数式…

5月10号软件资讯更新合集....

elementary OS 图像注释工具 Annotator 1.2 发布 Annotator 是一个免费开源图像注释工具&#xff0c;最初是为 elementary OS 设计&#xff0c;但也可用于其他 Linux。近日该工具发布了 1.2 版本&#xff0c;新版本增加了对全屏、当前窗口和选择区域进行截图等功能。 新版本还…

Dcoker高级篇

一、复杂安装详细说明 &#xff08;一&#xff09;安装mysql主从复制 主从复制原理 原理&#xff1a; &#xff08;1&#xff09;master服务器将数据的改变记录二进制binlog日志&#xff0c;当master上的数据发生改变时&#xff0c;则将其改变写入二进制日志中&#xff1b;&…

quill编辑器自定义音频、视频、行内style样式(字符边框、首行缩进)

文章目录 一、音频1、自定义内容2、引入使用 二、视频1、自定义内容2、引入使用 三、文本添加行内style样式&#xff08;文本边框&#xff09;1、不带有下拉框&#xff08;1&#xff09;自定义内容&#xff08;2&#xff09;引入使用 2、带有下拉框&#xff08;1&#xff09;自…

【SpringCloud】Nacos安装与入门

目录 一、认识与安装 1、访问 2、下载 3、解压 4、启动 5、访问 二、基本使用 1、搭建服务 2、服务注册 3、服务发现 一、认识与安装 他是阿里巴巴的产品&#xff0c;也是SpringCloud中的一个注册中心组件&#xff0c;其功能相比Eureka更丰富&#xff0c;在国内更受欢…

设计师常用的7款界面设计工具!

不同的界面设计工具都有其独特的优点和不足之处。本文为大家介绍设计师常用的7款界面设计工具&#xff1a;即时设计是一款在线UI界面设计工具&#xff0c;拥有中文界面和丰富的社区资源&#xff0c;适合初学者和专业设计师使用。Sketch具有直观的矢量编辑工具和可重复使用的符号…

Prometheus原理与二次开发

Prometheus的功能、架构、组件、配置 1 介绍 1.1 简介 Promethues是一套开源系统监控及报警框架&#xff0c;启发于Google的borgmon, 由SoundCoud员工于2012年创建&#xff0c;并于2015年正式发布,2016年正式加入Cloud Native Computing Fundation 1.2 监控目的 趋势分析&…

用递归算法删除不带头结点的单链表中值为x的值

#include<stdio.h> #include<stdlib.h> typedef struct Lnode{int data;//数据域 struct Lnode *next;//指针域 }Lnode,*LinkList; int a[5]{1,2,3,3,4}; int n5; //这里使用尾插法&#xff0c;把数据放在L中 void InitList(Lnode *L){int i;Lnode *s,*rL;//r为尾…

深度学习技巧应用14-深度学习跨框架应用,ONNX实现模型互操作性

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下&#xff0c;深度学习技巧应用14-深度学习跨框架应用&#xff0c;ONNX实现模型互操作性&#xff0c;在深度学习领域&#xff0c;有很多优秀的框架可以使用&#xff0c;例如TensorFlow、PyTorch、Caffe等。但是&…

在Qt中设置程序图标的方法介绍

在Qt中设置程序图标的方法介绍 [1] 在Qt中设置程序图标的方法介绍1 概述1&#xff09;可执行程序&#xff08;以及对应的快捷方式&#xff09;的图标2&#xff09;程序界面标题栏图标3&#xff09;程序在任务栏中的图标 2 方法2.1 创建资源文件2.2 设置标题栏图标2.3 设置可执行…