五、关于zephyr上使用spi通信时(如使用dma+回调)需要的配置
首先app.overlay的配置使用dma回调方式dma1{statusokay;};dmamux1{statusokay;};spi2{/* 使用 PLL1_Q 作为 SPI2 时钟源 */pinctrl-0spi2_nss_pb12spi2_sck_pb13spi2_miso_pb14spi2_mosi_pb15;pinctrl-namesdefault;statusokay;dmasdmamux1040(STM32_DMA_PERIPH_TX|STM32_DMA_PRIORITY_HIGH),dmamux1139(STM32_DMA_PERIPH_RX|STM32_DMA_PRIORITY_HIGH);dma-namestx,rx;};在pro.conf中添加CONFIG_NOCACHE_MEMORYy CONFIG_SPI_ASYNCy CONFIG_SPIy CONFIG_SPI_STM32y CONFIG_SPI_STM32_DMAy CONFIG_SPI_STM32_INTERRUPTymain.c测试#definePACKET_SIZE64#defineTEST_COUNT10/* 测试数据 */staticconstuint8_ttx_pattern[PACKET_SIZE]{0xAA,0x55,0x12,0x34,0xDE,0xAD,0xBE,0xEF,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,0xA5,0x5A,0xA5,0x5A,0xA5,0x5A,0xA5,0x5A,0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00};__nocachestaticuint8_ttx_buffer[PACKET_SIZE];__nocachestaticuint8_trx_buffer[PACKET_SIZE];/* 同步信号量用于等待异步回调 */staticK_SEM_DEFINE(spi_sync_sem,0,1);/* 传输结果回调中写入 */staticintspi_transfer_result;/* SPI 配置 */staticstructspi_configspi2_cfg{.frequency16000000,.operationSPI_OP_MODE_MASTER|SPI_WORD_SET(8)|SPI_TRANSFER_MSB,.slave0,};/* * 异步传输完成回调 * 在中断上下文中调用仅做标记释放信号量不能做耗时操作 * */staticvoidspi_transfer_done(conststructdevice*dev,intresult,void*user_data){spi_transfer_resultresult;k_sem_give(spi_sync_sem);}/* * 单次异步收发封装提交 等待回调 * 返回 0 成功负值为错误码 * */staticintspi_transceive_async_once(conststructdevice*dev,conststructspi_config*cfg,constuint8_t*tx_data,size_ttx_len,uint8_t*rx_data,size_trx_len,int32_ttimeout_ms){/* 构建 TX buf */structspi_buftx_buf{.buf(void*)tx_data,.lentx_len,};structspi_buf_settx_set{.bufferstx_buf,.count1,};/* 构建 RX buf */structspi_bufrx_buf{.bufrx_data,.lenrx_len,};structspi_buf_setrx_set{.buffersrx_buf,.count1,};/* 提交异步传输 */intretspi_transceive_cb(dev,cfg,tx_set,rx_set,spi_transfer_done,NULL);if(ret0){printk(spi_transceive_cb submit failed: %d\n,ret);returnret;}/* 等待回调唤醒 */retk_sem_take(spi_sync_sem,K_MSEC(timeout_ms));if(ret!0){printk(SPI transfer timeout! (%d)\n,ret);return-ETIMEDOUT;}/* 检查传输结果 */if(spi_transfer_result0){printk(SPI transfer error: %d\n,spi_transfer_result);returnspi_transfer_result;}return0;}voidmy_thread(void*arg1,void*arg2,void*arg3){intpass0,fail0;k_msleep(500);printk(\n);printk(\n);printk( SPI2 DMA Async Loopback Test\n);printk( Connect: PB14(MISO) - PB15(MOSI)\n);printk( Packet size: %d bytes\n,PACKET_SIZE);printk(\n\n);conststructdevice*spi2DEVICE_DT_GET(DT_NODELABEL(spi2));if(!device_is_ready(spi2)){printk(ERROR: SPI2 device not ready!\n);while(1){k_sleep(K_FOREVER);}}printk(SPI2 device ready\n);printk(tx_buffer addr: %p\n,tx_buffer);printk(rx_buffer addr: %p\n,rx_buffer);memcpy(tx_buffer,tx_pattern,PACKET_SIZE);/* 循环测试 */for(inti0;iTEST_COUNT;i){memset(rx_buffer,0,PACKET_SIZE);intretspi_transceive_async_once(spi2,spi2_cfg,tx_buffer,PACKET_SIZE,rx_buffer,PACKET_SIZE,11000);if(ret0){printk([%2d] FAIL: error %d\n,i,ret);fail;continue;}if(memcmp(tx_buffer,rx_buffer,PACKET_SIZE)0){printk([%2d] PASS\n,i);pass;}else{printk([%2d] FAIL: data mismatch\n,i);printk( byte[0]: tx0x%02X rx0x%02X\n,tx_buffer[0],rx_buffer[0]);fail;}k_msleep(100);}printk(\n\n);printk( Result: PASS%d FAIL%d (Total%d)\n,pass,fail,TEST_COUNT);printk(\n);while(1){k_msleep(1000);}}使用正常的收发方式即收发一体上面配置中取消dma相关即可。main.c#definePACKET_SIZE8staticconstuint8_ttx_pattern[PACKET_SIZE]{0xAA,0x55,0x12,0x34,0xDE,0xAD,0xBE,0xEF};staticuint8_trx_buffer[PACKET_SIZE];staticstructspi_configspi2_cfg_fast{.frequency16000000,.operationSPI_TRANSFER_LSB|SPI_WORD_SET(8)|SPI_TRANSFER_MSB|SPI_MODE_CPOL|SPI_MODE_CPHA,.slave0,};voidmy_thread(void*arg1,void*arg2,void*arg3){intpass0,fail0;printk( SPI2 Interrupt Loopback Test \n);printk(Connect PB14(MISO) - PB15(MOSI)\n\n);conststructdevice*spi2DEVICE_DT_GET(DT_NODELABEL(spi2));if(!device_is_ready(spi2)){printk(SPI2 not ready!\n);}printk(SPI2 ready\n\n);for(inti0;i10;i){memset(rx_buffer,0,PACKET_SIZE);structspi_buftx{.buf(void*)tx_pattern,.lenPACKET_SIZE};structspi_bufrx{.bufrx_buffer,.lenPACKET_SIZE};structspi_buf_settx_set{.bufferstx,.count1};structspi_buf_setrx_set{.buffersrx,.count1};intretspi_transceive(spi2,spi2_cfg_fast,tx_set,rx_set);if(ret0){printk(Iter %d: fail\n,i);fail;continue;}if(memcmp(tx_pattern,rx_buffer,PACKET_SIZE)0){printk(Iter %d: OK\n,i);pass;}else{printk(Iter %d: mismatch\n,i);fail;}}printk(\n Result: Pass%d Fail%d \n,pass,fail);while(1){k_msleep(1000);}}

相关新闻

Markdown-it 实战指南:现代Markdown解析架构深度解析

Markdown-it 实战指南:现代Markdown解析架构深度解析

Markdown-it 实战指南:现代Markdown解析架构深度解析 【免费下载链接】markdown-it Markdown parser, done right. 100% CommonMark support, extensions, syntax plugins & high speed 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-it Markdo…

2026/7/3 6:44:10阅读更多 →
大型装备制造企业如何选择PLM软件系统实现数字化智造升级

大型装备制造企业如何选择PLM软件系统实现数字化智造升级

大型装备制造企业在推进数字化智造升级的进程中,产品生命周期管理(PLM)系统已成为破局复杂产品结构、冗长项目周期及跨专业协同壁垒的核心引擎。然而,面对市场上琳琅满目的PLM供应商,如何精准识别并引入一套真正契合业…

2026/7/3 6:44:10阅读更多 →
基于Java后端的微信投票评选小程序完整开发包(含源码、数据库与部署指南)

基于Java后端的微信投票评选小程序完整开发包(含源码、数据库与部署指南)

一套开箱即用的微信小程序投票评选系统,专为高校毕业设计、课程设计和期末大作业打造。前端使用微信原生小程序框架,后端采用Java语言开发,支持SSM或SpringBoot架构,配套MySQL 5.7数据库脚本(sprvtppxxthsg5500a5zb.sq…

2026/7/3 6:44:10阅读更多 →
软考成绩“冻结期”潜规则曝光:为什么你的2021年成绩在2024年突然失效?

软考成绩“冻结期”潜规则曝光:为什么你的2021年成绩在2024年突然失效?

更多请点击: https://kaifayun.com 第一章:软考成绩保留几年有效期 软考(计算机技术与软件专业技术资格(水平)考试)实行单科合格成绩滚动管理机制,考生通过某一科目后,该科成绩在一…

2026/7/3 8:04:17阅读更多 →
D2DX现代化补丁:3大核心功能彻底解决暗黑破坏神2老游戏卡顿与画面问题

D2DX现代化补丁:3大核心功能彻底解决暗黑破坏神2老游戏卡顿与画面问题

D2DX现代化补丁:3大核心功能彻底解决暗黑破坏神2老游戏卡顿与画面问题 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx…

2026/7/3 8:04:17阅读更多 →
专科生论文写作利器:9款AI工具实测与使用攻略

专科生论文写作利器:9款AI工具实测与使用攻略

1. 专科生论文写作困境与AI工具的崛起作为一名经历过论文写作煎熬的过来人,我深知专科生在毕业论文写作过程中面临的三大痛点:时间紧迫、资料匮乏和写作能力不足。很多同学直到最后一个月才开始着急,面对空白的文档和复杂的格式要求手足无措。…

2026/7/3 8:04:17阅读更多 →
League Akari:英雄联盟玩家的智能自动化助手,3大核心功能提升游戏体验

League Akari:英雄联盟玩家的智能自动化助手,3大核心功能提升游戏体验

League Akari:英雄联盟玩家的智能自动化助手,3大核心功能提升游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …

2026/7/3 8:04:17阅读更多 →
影刀RPA新手教程:飞书审批流自动发起完全指南——表单填写、附件上传与审批状态追踪

影刀RPA新手教程:飞书审批流自动发起完全指南——表单填写、附件上传与审批状态追踪

影刀RPA新手教程:飞书审批流自动发起完全指南——表单填写、附件上传与审批状态追踪 作者:林焱 | 真实案例驱动,每篇覆盖12大核心模块,禁止空话。 案例背景:报销审批从3天缩短到10分钟 公司报销流程是:填飞…

2026/7/3 8:04:17阅读更多 →
2026吉安黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式

2026吉安黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式

走进江西吉安的街头巷尾,黄金、铂金、白银回收的招牌随处可见,店铺鳞次栉比却鱼龙混杂,报价虚高、克扣成色、压价套路层出不穷,市民想要变现手中闲置首饰、金条或老银饰,往往难以甄别靠谱渠道。为帮大家避开陷阱、找到…

2026/7/3 7:59:17阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
LV3296与PIC18F45K22的UART通信与USB扩展方案

LV3296与PIC18F45K22的UART通信与USB扩展方案

1. LV3296与PIC18F45K22的硬件搭档解析在嵌入式数据采集系统中,LV3296条形码扫描模块与PIC18F45K22微控制器的组合堪称经典搭配。LV3296作为一款工业级条码扫描头,其核心是一颗高性能CMOS图像传感器,配合专用解码芯片,能自动识别包…

2026/7/3 0:03:41阅读更多 →
AI初创生存指南:6个月完成可信度验证闭环

AI初创生存指南:6个月完成可信度验证闭环

1. 这不是“逆袭指南”,而是一份AI初创公司真实生存手记“How To Beat Odds As an AI Startup?”——这个标题乍看像一句热血口号,但在我带过7个从0到1的AI产品团队、亲手踩过融资失败、技术债崩盘、客户POC卡在最后一公里等23类典型坑之后,…

2026/7/3 0:03:41阅读更多 →
多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

多模态+推理链+RAG 2.0+智能体:工业级AI系统落地四支柱

1. 这不是又一篇“AI趋势速览”,而是一份实操者手记:当多模态、推理链、检索增强与智能体协作真正撞进工程现场“LAI #73”这个编号本身就像一个暗号——它不属于某家大厂的白皮书,也不是学术会议的议程表,而是长期泡在模型训练集…

2026/7/3 0:03:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/3 1:12:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/3 1:36:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/3 2:08:15阅读更多 →