完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我已经声明了我的 SPI2 基址:
#define PERIPH_BASE 0x40000000U #define APB1PERIPH_BASE PERIPH_BASE #define SPI2_BASEADDR (APB1PERIPH_BASE + 0x3800) 我有一个 SPI 句柄结构: 类型定义结构 { SPI_RegDef_t *pSPIx;//这保存了 SPIx 外设的基址 SPI_Config_t SPIConfig; uint8_t *pTxBuffer;//存储应用程序的 Tx 缓冲区地址,因为这将被 ISR 代码重用 uint8_t *pRxBuffer;// 存储应用程序的 Rx 缓冲区地址。 uint32_t TxLen;//存储Tx Len uint32_t RxLen;// 存储 Rx Len uint8_t 发送状态;//存储Tx状态 uint8_t RxState;//存储Rx状态 }SPI_Handle_t; 然后,我有 SPI 寄存器定义结构: 类型定义结构 { __vo uint32_t CR1;//可以得到所有的SPI寄存器dalam参考手册SPI部分(SPI register map) __vo uint32_t CR2; __vo uint32_t SR; __vo uint32_t 博士; __vo uint32_t CRCPR; __vo uint32_t RXCRCR; __vo uint32_t TXCRCR; __vo uint32_t I2SCFGR; __vo uint32_t I2SPR; }SPI_RegDef_t; 然后,我执行 SPI2 初始化函数: void SPI2_Inits(无效) { SPI_Handle_t SPI2句柄;//1、初始化spi2句柄 SPI2handle.pSPIx = SPI2; //初始化SPI基地址 SPI2handle.SPIConfig.SPI_BusConfig = SPI_BUS_CONFIG_FD; //SPI配置总线使用全双工 SPI2handle.SPIConfig.SPI_DeviceMode = SPI_DEVICE_MODE_MASTER; //jadikan device kita sebagai master kita xdk slave utk exercise ni SPI2handle.SPIConfig.SPI_SclkSpeed = SPI_SCLK_SPEED_DIV8; //sebab kita nak 2MHz 所以 kne 除以 8 SPI2handle.SPIConfig.SPI_DFF = SPI_DFF_8BITS; //设置数据格式为8位 SPI2handle.SPIConfig.SPI_CPOL = SPI_CPOL_LOW; //低到默认值 SPI2handle.SPIConfig.SPI_CPHA = SPI_CPHA_LOW; //低到默认值 SPI2handle.SPIConfig.SPI_SSM = SPI_SSM_DI; //软件奴隶管理,为NSS pin禁用ssm,sebab kita guna硬件 SPI_Init(&SPI2handle); //调用spi init dan发送SPI2handle的所有地址 } 然后,我的主要代码要执行这个功能: SPI_SendDataIT(&SPI2handle,&dummy,1); SPI_SendDataIT 函数是: uint8_t SPI_SendDataIT(SPI_Handle_t *pSPIHandle, uint8_t *pTxBuffer, uint32_t Len) { uint8_t 状态 = pSPIHandle->TxState; 如果(状态!= SPI_BUSY_IN_TX) { pSPIHandle->pTxBuffer = pTxBuffer; pSPIHandle->TxLen = Len; pSPIHandle->TxState = SPI_BUSY_IN_TX; pSPIHandle->pSPIx->CR2 |= ( 1 << SPI_CR2_TXEIE ); } 返回状态; } 问题是,在该行的 SPI_SendData() 函数中 pSPIHandle->pSPIx->CR2 |= ( 1 << SPI_CR2_TXEIE ); 其中 pSPIHandle 没有将 CR2 的寄存器移入 pSPIx 地址,即 SPI2。在这种情况下,我想设置TXEIE,但是这一行没有设置它。 我在 SPI_CR2_TXEIE 中声明的位置: #define SPI_CR2_RXDMAEN 0 #define SPI_CR2_TXDMAEN 1 #define SPI_CR2_SSOE 2 #define SPI_CR2_NSSP 3 #define SPI_CR2_FRF 4 #define SPI_CR2_ERRIE 5 #define SPI_CR2_RXNEIE 6 #define SPI_CR2_TXEIE 7 #define SPI_CR2_DS 8 #define SPI_CR2_FRXTH 12 #define SPI_CR2_LDMA_RX 13 #define SPI_CR2_LDMA_TX 14 我没有找到我的代码中的错误所在。有人可以帮助我吗?我正在使用 STM32f302r8 |
|
相关推荐
1个回答
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2649 浏览 1 评论
3213 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1787 浏览 1 评论
3617 浏览 6 评论
5996 浏览 21 评论
944浏览 4评论
1318浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
589浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1307浏览 3评论
1367浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 00:39 , Processed in 0.972669 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号