当前位置: 首页 > article >正文

STM32CubeMx 软件模拟SPI四种模式

(1)SPI的概念SPI总线传输一共有种模式这种模式分别由时钟极性(CPOL)和时钟相位(CPHA)来定义。CPOL规定了SCK时钟信号空闲状态的电平CPHA规定了数据是在SCK时钟的上升沿还是下降沿被采样模式0CPOL0CPHA 0 SCK空闲为低电平数据在SCK的上升沿被采样模式1CPOL0CPHA 1 SCK空闲为低电平数据在SCK的下降沿被采样模式2CPOL1CPHA 0 SCK空闲为高电平数据在SCK的下降沿被采样模式3CPOL1CPHA 1 SCK空闲为高电平数据在SCK的上升沿被采样(2)延时函数的配置目前的话一般是推荐使用基本定时器去作为延时函数的计数从表格中我们了解到的是基本定时器分别是TIM6、TIM7分别是挂载在APB1上面的。下面的delay.h的内容#ifndef __BSP_DELAY_H #define __BSP_DELAY_H #include main.h #include tim.h void delay_us(uint16_t tim_us); void delay_ms(uint16_t tim_ms); void delay_s(uint16_t tim_s); #endif下面是delay.c的内容#include delay.h void delay_us(uint16_t tim_us) { __HAL_TIM_SET_COUNTER(htim6 , 0); while(__HAL_TIM_GetCounter(htim6) tim_us); } void delay_ms(uint16_t tim_ms) { for(int i 0 ; i 1000 ; i ) { __HAL_TIM_SET_COUNTER(htim6 , 0); while(__HAL_TIM_GetCounter(htim6) tim_ms); } } void delay_s(uint16_t tim_s) { for(int i 0 ; i 1000000 ; i ) { __HAL_TIM_SET_COUNTER(htim6 , 0); while(__HAL_TIM_GetCounter(htim6) tim_s); } }(3)软件模拟SPI的配置下面是SPI.h的内容#ifndef __SPI_H_ #define __SPI_H_ #include main.h #include SPI.h #include delay.h #define SPI_SCK_PIN GPIO_PIN_4 #define SPI_SCK_GPIO_PORT GPIOB #define SPI_MOSI_PIN GPIO_PIN_5 #define SPI_MOSI_GPIO_PORT GPIOB #define SPI_MISO_PIN GPIO_PIN_2 #define SPI_MISO_GPIO_PORT GPIOB #define SPI_NSS_PIN GPIO_PIN_3 #define SPI_NSS_GPIO_PORT GPIOB #define MOSI_H HAL_GPIO_WritePin(SPI_MOSI_GPIO_PORT, SPI_MOSI_PIN, GPIO_PIN_SET) #define MOSI_L HAL_GPIO_WritePin(SPI_MOSI_GPIO_PORT, SPI_MOSI_PIN, GPIO_PIN_RESET) #define SCK_H HAL_GPIO_WritePin(SPI_SCK_GPIO_PORT, SPI_SCK_PIN, GPIO_PIN_SET) #define SCK_L HAL_GPIO_WritePin(SPI_SCK_GPIO_PORT, SPI_SCK_PIN, GPIO_PIN_RESET) #define MISO HAL_GPIO_ReadPin(SPI_MISO_GPIO_PORT, SPI_MISO_PIN) #define NSS_H HAL_GPIO_WritePin(SPI_NSS_GPIO_PORT, SPI_NSS_PIN, GPIO_PIN_SET) #define NSS_L HAL_GPIO_WritePin(SPI_NSS_GPIO_PORT, SPI_NSS_PIN, GPIO_PIN_RESET) uint8_t SOFT_SPI_RW_MODE0(uint8_t write_dat); uint8_t SOFT_SPI_RW_MODE1(uint8_t byte); uint8_t SOFT_SPI_RW_MODE2(uint8_t byte); uint8_t SOFT_SPI_RW_MODE3(uint8_t write_dat); #endif下面是SPI.c的内容#include SPI.h /* CPOL 0, CPHA 0, MSB first */ uint8_t SOFT_SPI_RW_MODE0( uint8_t write_dat ) { uint8_t i, read_dat; for( i 0; i 8; i ) { if( write_dat 0x80 ) MOSI_H; else MOSI_L; write_dat 1; delay_us(1); SCK_H; read_dat 1; if( MISO ) read_dat; delay_us(1); SCK_L; __nop(); } return read_dat; } /* CPOL0,CPHA1, MSB first */ uint8_t SOFT_SPI_RW_MODE1(uint8_t byte) { uint8_t i,Temp0; for(i0;i8;i) { SCK_H; if(byte0x80) { MOSI_H; } else { MOSI_L; } byte 1; delay_us(1); SCK_L; Temp 1; if(MISO) Temp; delay_us(1); } return (Temp); } /* CPOL1,CPHA0, MSB first */ uint8_t SOFT_SPI_RW_MODE2(uint8_t byte) { uint8_t i,Temp0; for(i0;i8;i) { if(byte0x80) { MOSI_H; } else { MOSI_L; } byte 1; delay_us(1); SCK_L; Temp 1; if(MISO) Temp; delay_us(1); SCK_H; } return (Temp); } /* CPOL 1, CPHA 1, MSB first */ uint8_t SOFT_SPI_RW_MODE3( uint8_t write_dat ) { uint8_t i, read_dat; for( i 0; i 8; i ) { SCK_L; if( write_dat 0x80 ) MOSI_H; else MOSI_L; write_dat 1; delay_us(1); SCK_H; read_dat 1; if( MISO ) read_dat; delay_us(1); __nop(); } return read_dat; }(4)四种模式逻辑分析仪测试参考软件模拟SPI接口程序代码4种模式_模拟spi程序-CSDN博客HAL库TIM定时器精准延时_stm32cubemx如何配置延时函数-CSDN博客

相关文章:

STM32CubeMx 软件模拟SPI四种模式

(1)SPI的概念: SPI总线传输一共有4种模式,这4种模式分别由时钟极性(CPOL)和时钟相位(CPHA)来定义。 CPOL:规定了SCK时钟信号空闲状态的电平 CPHA:规定了数据是在SCK时钟的上升沿还是下降沿被采样 模式0&am…...

nli-distilroberta-base完整指南:Web服务接口设计+返回格式解析

nli-distilroberta-base完整指南:Web服务接口设计返回格式解析 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级但强大的模型能够快速判断句子对之间的三种…...

【LeArm】从零玩转机械臂(一):开箱、配网与基础控制实战

1. LeArm机械臂开箱初体验 第一次拿到LeArm机械臂的包装箱时,明显能感受到厂家在包装上的用心。打开外层纸箱后,内部还有一层泡沫保护层,所有部件都被固定在定制泡沫槽位里,这种包装方式让我想起了高端电子产品的开箱体验。取出所…...

OpenClaw+GLM-4.7-Flash:个人财务数据处理自动化方案

OpenClawGLM-4.7-Flash:个人财务数据处理自动化方案 1. 为什么需要自动化财务处理 每个月末,我都会面对一堆散乱的银行流水、电子发票和Excel表格。手动整理这些数据不仅耗时,还容易出错。直到我发现OpenClaw这个开源自动化框架&#xff0c…...

联合仿真模型验证:Carsim + 车辆动力学模型(十四自由度)实践

联合仿真模型验证Carsim车辆动力学模型(十四自由度)软件使用:Carsim2019.0Matlab/Simulink 适用场景:采用模块化建模方法,搭建14自由度整车模型,将此模型与carsim进行联合仿真模型验证。 (模型和 carsim存在一定误差) 产品 simulink源码包含如下模块:工况…...

投资回报不到 1 年!这套导热油炉处理油泥减量化方案,凭什么火遍行业?

行业痛点:油泥处置面临的严峻挑战随着环保政策日趋严格,HW08类含油污泥的处理已成为石化、炼油等企业的必答题。然而,传统处理方式面临四大核心痛点:成本压力巨大:传统焚烧处置费用高达3000-5000元/吨,填埋…...

使用快马平台基于OpenSpec一键生成RESTful API原型,加速后端服务开发

今天想和大家分享一个快速搭建RESTful API原型的经验。最近在开发一个用户管理系统,发现用OpenSpec规范配合InsCode(快马)平台可以省去大量重复工作,特别适合需要快速验证想法的场景。 OpenSpec规范的价值 OpenSpec(也就是OpenAPI规范&#x…...

Linux文件操作命令与文件权限

1.创建一个新文件2.查看显示文件3.more命令类似 cat,不过会以一页一页的形式显示4.head命令显示文件的头部内容5.tail命令可用于查看文件的内容的后10行6.文件的压缩与解压7.tar命令用来建立8.zip命令用于压缩文件9.unzip命令用于解压缩zip文件10.文件属性...

淘宝任务自动化:让每天25分钟的重复操作变成5分钟的智能管理

淘宝任务自动化:让每天25分钟的重复操作变成5分钟的智能管理 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi …...

终极指南:5步解决魔兽争霸III在现代Windows系统上的兼容性问题

终极指南:5步解决魔兽争霸III在现代Windows系统上的兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Window…...

U校园脚本背后的技术揭秘:油猴Tampermonkey如何实现自动答题与挂时长?

油猴脚本技术解析:从DOM操作到自动化实践 打开浏览器开发者工具时,你是否注意过那些在页面加载时闪烁的DOM元素?正是这些看似简单的节点操作,构成了现代Web自动化的基础。Tampermonkey(油猴)作为最流行的用…...

Mars3D实战:5分钟搞定GIS地图可视化开发(附完整代码示例)

Mars3D实战:5分钟搞定GIS地图可视化开发(附完整代码示例) 当GIS开发者第一次接触Mars3D时,最迫切的需求往往不是理解底层原理,而是快速实现一个可运行的地图可视化demo。本文将用厨房烹饪式的直白语言,带你…...

OpenClaw+nanobot镜像:3步配置QQ聊天机器人触发AI任务

OpenClawnanobot镜像:3步配置QQ聊天机器人触发AI任务 1. 为什么选择OpenClawnanobot组合? 去年冬天,当我第一次尝试用QQ机器人自动处理群消息时,经历了漫长的环境配置地狱。直到发现星图平台的nanobot镜像,这个开箱即…...

从学术研究到工业部署,Python张量框架选型决策树(含模型规模×硬件约束×团队能力×合规要求4维评估矩阵)

第一章:从学术研究到工业部署,Python张量框架选型决策树(含模型规模硬件约束团队能力合规要求4维评估矩阵)在将深度学习模型从论文实验推向生产环境的过程中,张量框架的选择远不止“谁更流行”的简单判断。它是一次多目…...

3步实现PDF文献自动化管理:Zotero Reference插件新手入门指南

3步实现PDF文献自动化管理:Zotero Reference插件新手入门指南 【免费下载链接】zotero-reference PDF references add-on for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reference 一、价值定位:为什么选择Zotero Reference …...

Android Studio中文界面本地化指南:提升开发效率的全场景解决方案

Android Studio中文界面本地化指南:提升开发效率的全场景解决方案 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack And…...

N_m3u8DL-RE:现代流媒体下载的终极解决方案

N_m3u8DL-RE:现代流媒体下载的终极解决方案 【免费下载链接】N_m3u8DL-RE 跨平台、现代且功能强大的流媒体下载器,支持MPD/M3U8/ISM格式。支持英语、简体中文和繁体中文。 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE 在当今…...

从QEMU仿真到真机烧录:用Yocto为ArmSoM-Sige7开发板定制RK3588镜像的完整流程

从QEMU仿真到真机烧录:用Yocto为ArmSoM-Sige7开发板定制RK3588镜像的完整流程 在嵌入式开发领域,能够快速验证软件栈的可行性并最终部署到真实硬件是每个开发者的核心诉求。本文将带你完整走通从虚拟仿真到实体部署的全链路,使用Yocto项目为搭…...

右键菜单瘦身术:如何用ContextMenuManager让Windows操作效率提升300%

右键菜单瘦身术:如何用ContextMenuManager让Windows操作效率提升300% 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是我们日常操作…...

5大突破性功能:重新定义Mac微信体验的终极指南

5大突破性功能:重新定义Mac微信体验的终极指南 【免费下载链接】WeChatExtension-ForMac Mac微信功能拓展/微信插件/微信小助手(A plugin for Mac WeChat) 项目地址: https://gitcode.com/gh_mirrors/we/WeChatExtension-ForMac 你是否曾因微信消息被撤回而错…...

《热江手游》千人跨服战 + 自由交易,老玩家直呼真香!

《热江手游》手游来袭,正版授权 1:1 复刻经典,剥离冗余氪金系统,回归 MMO 最本真的乐趣 —— 无 VIP 碾压、无强制付费,所有极品道具全靠打,零氪玩家也能凭实力登顶江湖!​ 无论是泫勃派、南林等标志性地图…...

低成本搭建QQ机器人:OpenClaw+nanobot消息中转方案

低成本搭建QQ机器人:OpenClawnanobot消息中转方案 1. 为什么选择OpenClawnanobot方案 去年我在管理一个小型技术社群时,经常需要处理重复性的问答和通知发布。尝试过多个机器人框架后,最终选择了OpenClawnanobot的组合方案。这个方案最吸引…...

AI专著生成新方法:借助工具,轻松搞定学术专著撰写

撰写学术专著,研究者们通常面临着如何在“内容深度”与“覆盖广度”之间取得平衡的挑战。这种平衡往往成为了许多学者的一大难题。从内容深度的角度看,专著的核心思想应该具备足够的学术分量,除了要清晰表述“是什么”,更需深入探…...

Cosmos-Reason1-7B保姆级教程:从NVIDIA模型下载到浏览器界面可用全流程

Cosmos-Reason1-7B保姆级教程:从NVIDIA模型下载到浏览器界面可用全流程 本文面向想要快速上手Cosmos-Reason1-7B推理工具的初学者,无需深厚技术背景,跟着步骤操作即可完成本地部署和使用。 1. 工具简介:你的本地推理助手 Cosmos-…...

5分钟搞定OpenClaw飞书接入:Qwen3.5-9B对话机器人配置

5分钟搞定OpenClaw飞书接入:Qwen3.5-9B对话机器人配置 1. 为什么选择OpenClaw飞书Qwen3.5-9B组合 上周我在整理团队周报时,突然意识到一个痛点:每次都要反复切换浏览器、文档和聊天工具,手动复制粘贴信息。这种机械操作不仅浪费…...

OpenClaw+百川2-13B办公自动化:会议纪要生成与邮件发送全流程

OpenClaw百川2-13B办公自动化:会议纪要生成与邮件发送全流程 1. 为什么需要自动化会议纪要处理 上周三的部门例会让我彻底崩溃了——2小时的会议录音,手动整理成纪要花了整整3小时。更糟的是,当我终于把邮件发出去时,发现漏掉了…...

从半加器到四位加法器:在Intel Quartus里玩转模块化设计与层次化视图

从半加器到四位加法器:Intel Quartus中的模块化设计实战 引言 在数字电路设计的浩瀚宇宙中,加法器就像是最基础的原子结构,简单却蕴含着无限可能。作为一名FPGA开发者,我常常思考如何让设计既高效又优雅。记得第一次在Quartus中完…...

Pixel Dream Workshop实操手册:VAE Tiling开启前后显存占用与渲染质量对比

Pixel Dream Workshop实操手册:VAE Tiling开启前后显存占用与渲染质量对比 1. 引言 Pixel Dream Workshop(像素幻梦创意工坊)是一款基于FLUX.1-dev扩散模型的像素艺术生成工具。它采用了独特的16-bit像素风格界面设计,为创作者提…...

低成本DIY智能小车核心模块:用STM32和TB6612实现带编码器的定速巡航功能

低成本DIY智能小车核心模块:用STM32和TB6612实现带编码器的定速巡航功能 周末在工作室调试新做的智能小车时,突然意识到一个有趣的现象:当我们给电机设定固定转速后,实际速度总会因为电池电压波动、负载变化等因素产生偏差。这让…...

CAN总线大数据传输的解决方案

CAN总线通讯最多传输8个字节,如果需要传输大量数据该怎么办呢?这个问题工业界有很多成熟的解决方案,我现在就来详细为你介绍各种处理方法。 一、CAN协议的限制原因 CAN帧的数据场限制为8字节,主要是为了保证: • 实时性…...