Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
NXP 微控制器
NXP-MCXN236
SPI
rt-thread中配置SPI继续loopback测试
发布于 2024-07-06 20:51:40 浏览:482
订阅该版
本次测试进行SPI的loopback,可以看到根据NXP的LP_FLEXCOMM(Low-Power Flexible Communication Interface)模块当UART用,可以当SPI用,也可以当I2C用,我们在串口测试的是时候可以看到在 board 文件夹下的板级 Kconfig 文件中2/4/5暂时被分配给了串口,1/3/6初步分配给了SPI,我们本次进行SPI的loopback本来初步想通过SPI6实现,实际上在开发板上SPI6硬件连接着W25Q64,并没有引出,所以修改通过SPI3进行。 SPI3相应的引脚为 - CS:P1_3、 - CLK:P1_1、 - MOSI:P1_0、 - MISO:P1_2, 对应的接口为FC1,注意要实现loopback请将MOSI:P1_0、MISO:P1_2连接上。 打来evn工具:  输入menuconfig 命令,进入配置界面`Hardware Drivers Config-->On-chip Peripheral`,打开SPI3:  返回到cmd界面输入scons --target=mdk5,生成新的工程:  代码编译后出现了4个错误: 一个是缺少一个`“}”`,就在`static struct lpc_spi lpc_obj`中对应开启的SPI6处,添加上就好了; 一个是kDmaRequestMuxLpFlexcomm6Tx未定义,这个属于底层文件中的内容,针对N236的放在了MCXN236.h中了,添加头文件并添加: ```c #define kDmaRequestMuxLpFlexcomm6Tx kDma0RequestMuxLpFlexcomm6Tx #define kDmaRequestMuxLpFlexcomm6Rx kDma0RequestMuxLpFlexcomm6Rx ``` 编译后4个错误就都消失。 接下来我们添加SPI的实例: ```c #define SPI_NAME "spi30" #define CS_PIN (1*32+3) static struct rt_spi_device *spi_dev; /* attach spi device */ static int rt_spi_device_init(void) { struct rt_spi_configuration cfg; rt_hw_spi_device_attach("spi3", SPI_NAME, CS_PIN); cfg.data_width = 8; cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB | RT_SPI_NO_CS; cfg.max_hz = 1 *1000 *1000; spi_dev = (struct rt_spi_device *)rt_device_find(SPI_NAME); if (RT_NULL == spi_dev) { rt_kprintf("spi sample run failed! can't find %s device!\n", SPI_NAME); return -RT_ERROR; } rt_spi_configure(spi_dev, &cfg); return RT_EOK; } INIT_APP_EXPORT(rt_spi_device_init); /* spi loopback mode test case */ static int spi_sample(int argc, char **argv) { rt_uint8_t t_buf[32], r_buf[32]; int i = 0; static struct rt_spi_message msg1; for (i = 0; i < sizeof(t_buf); i++) { t_buf[i] = i; } msg1.send_buf = &t_buf; msg1.recv_buf = &r_buf; msg1.length = sizeof(t_buf); msg1.cs_take = 1; msg1.cs_release = 1; msg1.next = RT_NULL; rt_spi_transfer_message(spi_dev, &msg1); rt_kprintf("spi rbuf : "); for (i = 0; i < sizeof(r_buf); i++) { rt_kprintf("%x ", r_buf[i]); } rt_kprintf("\nspi loopback mode test over!\n"); return RT_EOK; } MSH_CMD_EXPORT(spi_sample, spi loopback test); ``` 测试结果如下: list device:  通过控制台运行spi_sample:  在这里有几个注意的地方, 一个是loopback的实现实际上就是利用的SPI的自发自收,所以不要忘记硬件要将MOSI和MISO要连接上,不要连接错了; 另外一个例程中带有spi_sample.c的例程,不管是自己写还是修改,在更换SPI通道重新生成keil工程的时候注意工程中是不是把spi_sample.c去掉了,去掉就添加一下,因为spi_sample.c中的INIT_APP_EXPORT等自动化的部分如果没有就不会编译,这样SPI的例程就不会添加进去了,对于工程来说是不会报错的,可是没有自动化初始化你就无法使用了。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
无言的朝圣
这家伙很懒,什么也没写!
文章
5
回答
0
被采纳
0
关注TA
发私信
相关文章
1
试贴-消灭0主题
2
LPC M4的一些资料
3
LPC4088的临时分支
4
lpc1788 ad 不稳定
5
1788 LCD控制器缓冲区字节问题
6
一起来学习LPC4088吧
7
上传LPC4088的realtouch主工程
8
RealBoard 4088预定帖 [第一批板子不多,预定提前结束]
9
晒RealBoard LPC4088开箱照啦,速带小板凳前来围观
10
4088主程序需要的SD卡资源
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部