管脚复用中对管脚功能确定的一点经验

2024-08-22 11:58

本文主要是介绍管脚复用中对管脚功能确定的一点经验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在嵌入式画板的时候, 我们需要先明确功能需求, 然后选择芯片, 然后再确定管脚, 特别是在嵌入式资源比较紧缺的时候, 合理分配管脚显得尤为重要.

但是当功能变得非常多的时候, 合理两个字也变得有一定的难度. 我这里谈谈我的一次分配的过程, 供大家参考.

第一步. 确定好功能和芯片
如我们要用 gd32f103 的 usart, i2c, spi 各一组, 由于芯片有很多管脚的封装, 这里功能简单, 我们选择 LQFP48 封装, 这些先在需求中确定下来.

第二步, 下载官方数据手册, 将封装整理出来.
如我们选择 LQFP48, 整理出来.

12PA1USART1_RTS, ADC012_IN1, TIMER1_CH1
13PA2USART1_TX, ADC012_IN2, TIMER1_CH2
14PA4SPI0_NSS, USART1_CK, ADC01_IN4

为了辅助我们得到对应的功能, 我们需要更直观的通过功能选择对应的管脚.

import pyexcel as peimport json# 存有管脚记录的 xlsx 文件.
fn = '/media/lhpc04/da8a185a-95f0-4cbd-ba0a-5fe144872bd7/worksapce/edits/lanhui/硬件/杆塔倾斜/stm32f103 管脚记录.xlsx'# 定义管脚数量
dddd = 3wrk = {}data = pe.get_sheet(file_name=fn)
for eline_i, eline in enumerate(data):dws = eline[10].replace('\n','').replace('/', ',').split(',')lnxx = Falseln_ind = eline[dddd]if not isinstance(ln_ind, int):continueln_eee = ''for dw in dws:dw = dw.strip()if dw == '':continuelnxx = True wd = dw.split('_')wd_ch = wd[0]wd_wr = '_'.join(wd[1:])if wd_ch not in wrk:wrk[wd_ch] = {}if wd_wr not in wrk[wd_ch]:wrk[wd_ch][wd_wr] = []wrk[wd_ch][wd_wr].append(ln_ind)ln_eee += dw +' 'print(json.dumps(wrk,indent=4))

这个代码大概就是将各个模块分出来, 如下面这个是

"USART1": {"CK": [119],"TX": [120,164],"RX": [121,165],"CTS": [122],"RTS": [123]},

打印我们需要的管脚

model_names=['USART1']for dx in model_names:if dx not in wrk: # 没有 该功能 print('# {}'.format(dx))continuedxxx = wrk[dx]print(dx)for d in dxxx:if len(dxxx[d]) == 1: # 如果只有一个复用, 就选在改引脚print('{:15s} {}'.format(d, dxxx[d][0]))else: # 否则输出列表print('{:15s} {}'.format(d, dxxx[d])) print()

输出

USART1
CK              119
TX              [120, 164]
RX              [121, 165]
CTS             122
RTS             123
  1. 我将上面的输出, 放在 vscode 这类有选择提示功能的文本编辑器中.
    在这里插入图片描述

右边的滚动条的提示, 我们可以分析是否重复. 根据情况, 选择列表的元素作为我们的功能选择.

  1. 最后根据改数据制作电路图.

ps: 项目是使用的 stm32f429, 所以部分样例数据是 stm32f429 176 管脚的. 所以 gd32f103的数据没有准备全, 大概介绍了我的一点经验.

这篇关于管脚复用中对管脚功能确定的一点经验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb