Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
国民技术_N32G45x
SPI
n32g457 spi驱动
发布于 2022-03-16 14:15:48 浏览:1583
订阅该版
[tocm] ### **_前言_** 参加创新“芯”引擎 | 国民技术N32G457 RT-Thread设计大赛,使用到了spi但是呢,spi接口使用rtt的还是头一次,所以呢还是学习。💪💪在使用spi的时候使用RT-Thread Studio开发板创建的模板工程有部分问题,没有drv_spi文件。使用spi不会啊,整半天整不出来询问大佬吧,大佬说没有文件啊,接口函数没办法给到芯片啊,然后大佬大手一挥给了我一个drv_spi.c/.h文件,改吧!😧😧😧奈何小弟才疏学浅的。刚开始弄,是真的不会啊。在群里也问了问群友啥的说在gitup上面有,发给了我一个链接,下载下来后添加进去,好了既然是弄好的,开始弄吧,结果天不随人愿,果然不出所料第一次一点反应也没有示波器抓,看着直直的波形发呆。😨😨😨好吧不行,大佬说看看寄存器实现了吗,但是Studio咋看不知道啊,算了先弄n32的裸机吧,因为使用keil比较熟练的缘故,毫无疑问,示波器一抓,跑的嗖嗖的。好了毕竟是参加的RT-Thread设计大赛,尽量调用RT-Thread的的函数实现。经过不懈的努力成了,但是波形好丑奥,都快成正弦波了,一看时钟18M不大啊,调小了弄弄吧,enn结果咋调调不对,一看我赛,里面分频固定死了4分频。哎无奈改吧。最后还是逃脱不了改的命运。🤣 ![QQ图片20220316105404.png](https://oss-club.rt-thread.org/uploads/20220316/7c429f2fd572a104ff11313d0f942af1.png) ![微信图片_20220316132045.png](https://oss-club.rt-thread.org/uploads/20220316/2e889246037554a017b63dd232317716.png) ### 实现spi接口 因为自己刚毕业,对各种东西的理解不是很深,感谢大佬(出出啊)的帮助, 因为我使用的事spi1,我控一个dac芯片所以只需要发送即可如果有需要读取,在n32的库的时候配置miso接口实现即可,使用RT-Thread可以调用函数来实现。 ###(一、)使用n32的库实现spi ``` void spi_init() { GPIO_InitType GPIO_InitCtlStruct; SPI_InitType SPI_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_SPI1, ENABLE); RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE); GPIO_InitCtlStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitCtlStruct.Pin = GPIO_PIN_5 | GPIO_PIN_7; GPIO_InitCtlStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitPeripheral(GPIOA, &GPIO_InitCtlStruct); SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;//全双工 SPI_InitStructure.SpiMode = SPI_MODE_MASTER; //主spi SPI_InitStructure.DataLen = SPI_DATA_SIZE_16BITS; //SPI 16位数据 SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_8; //16分频 SPI_InitStructure.CLKPOL = SPI_CLKPOL_LOW; //时钟极性 SPI_InitStructure.CLKPHA = SPI_CLKPHA_FIRST_EDGE; //初始时钟极性 SPI_InitStructure.FirstBit = SPI_FB_MSB; //指定数据传输从MSB位 SPI_InitStructure.CLKPHA = SPI_CLKPHA_SECOND_EDGE; //SPI_时钟_相位 SPI_InitStructure.NSS = SPI_NSS_SOFT; SPI_InitStructure.CRCPoly = 7; SPI_Init(SPI1, &SPI_InitStructure); SPI_Enable(SPI1, ENABLE); } void spi_write_(uint16_t data) { while (SPI_I2S_GetStatus(SPI1, SPI_I2S_TE_FLAG) == RESET); SPI_I2S_TransmitData(SPI1, data); } ``` ###(二)、使用rtt的接口实现 使用rtt的接口实现,我是参考api手册实现的,在这期间也弄了不少时间,学习了不少东西也。 一开始没有drv_spi文件经过群里伙伴(大佬)的指导,给链接啊,找到了文件。链接:https://github.com/RT-Thread/rt-thread/tree/master/bsp/n32g452xx/Libraries/rt_drivers 但是在使用时发现始终时钟为4分频,经过自己的修改,修改为半可调的因为是调用的n32的库所以,进行分频的调节频率。如果有需要的小伙伴可以下载使用。链接:https://gitee.com/zhao-yan1/n32-drv_spi/blob/master/n32_drv_spi.7z 🧐🧐🧐🧐🧐 **原代码:** ![微信图片_20220316132045.png](https://oss-club.rt-thread.org/uploads/20220316/2e889246037554a017b63dd232317716.png) **修改后:** ![QQ图片20220316132219.png](https://oss-club.rt-thread.org/uploads/20220316/d1f7100e05a29958eb85f414790b5d97.png) ![QQ图片20220316132305.png](https://oss-club.rt-thread.org/uploads/20220316/4ec270c5e1234b61a82ea274d73c6ff3.png) ``` #define SPI "spi1"//使用spi1接口 #define SPI_DA "spi10"//将设备配置成spi1的第0个设备 void spi_init(void) { rt_hw_spi_device_attach(SPI,SPI_DA,GPIOC,4);//将da挂载到SPI设备上 /* 查找 spi 设备获取设备句柄 */ spi_da = (struct rt_spi_device *)rt_device_find(SPI_DA); if (spi_da == RT_NULL) { rt_kprintf("spi sample run failed! can't find %s device!\n", SPI); } else { struct rt_spi_configuration spi_config; spi_config.data_width = 16; spi_config.max_hz = 10 * 1000 * 1000; spi_config.mode = RT_SPI_MASTER | RT_SPI_MODE_0| RT_SPI_MSB; rt_spi_configure(spi_da, &spi_config); } rt_pin_mode(LOAC, PIN_MODE_OUTPUT); rt_pin_write(LOAC,PIN_HIGH); } void spi_send(uint16_t data) { rt_spi_transfer (spi_da, data, RT_NULL, 1); rt_pin_write(LOAC,PIN_HIGH); rt_hw_us_delay(2); rt_pin_write(LOAC,PIN_HIGH); } ``` 注:rtt的spi只有2个n32支持3个spi接口,将第三个接口初始化后,在组件那不会用啊。 因为我是用的dac只是发送即可使用标准的spi,我的adc是芯海科技的芯片如果有需要可以看我链接修改使用。链接:https://club.rt-thread.org/ask/article/3325.html 最后,感谢大佬(出出啊)的帮助,也感谢群里群友伙伴大佬的帮助,有人说让我提交个pr但是作为刚毕业的小菜鸟来说,我不会啊😰😰😰,发个文章吧。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
嚜軒公告
努力中
文章
9
回答
205
被采纳
7
关注TA
发私信
相关文章
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
5
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
11
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部