完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是 XMC 领域的新手,正在尝试与 mfrc522 通信,谁能指出我的代码哪里出了问题,我试了很多次都无法与 mfrc522 连接。
以下是我的 SPI 设置和引脚布局 XMC_USIC_CH_t *spi_master_ch = XMC_SPI0_CH0; //Master Mode U1C0 XMC_GPIO_CONFIG_t master_rx_pin_config; XMC_GPIO_CONFIG_t master_tx_pin_config; XMC_GPIO_CONFIG_t master_selo_pin_config; XMC_GPIO_CONFIG_t master_clck_pin_config; XMC_GPIO_PORT_t *master_rx_pin = XMC_GPIO_PORT1; XMC_GPIO_PORT_t *master_tx_pin = XMC_GPIO_PORT1; XMC_GPIO_PORT_t *master_selo_pin = XMC_GPIO_PORT0; XMC_GPIO_PORT_t *master_clck_pin = XMC_GPIO_PORT0; XMC_SPI_CH_CONFIG_t spi_config_masterMode; int main(空白) { 主机模式 /*SPI 配置*/ spi_config_masterMode.baudrate = 200000; //100000; spi_config_masterMode.bus_mode = XMC_SPI_CH_BUS_MODE_MASTER; spi_config_masterMode.selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS; spi_config_masterMode.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE; /*初始化 SPI*/ XMC_SPI_CH_Init(spi_master_ch, spi_config_masterMode); XMC_SPI_CH_DisableFEM(spi_master_ch); XMC_SPI_CH_SetBitOrderMsbFirst(spi_master_ch); XMC_SPI_CH_SetWordLength(spi_master_ch, 8); //16 XMC_SPI_CH_SetFrameLength(spi_master_ch, (uint8_t)64); /* 配置时钟极性和时钟延迟 */ XMC_SPI_CH_ConfigureShiftClockOutput(spi_master_ch、 已启用 xmc_spi_ch_brg_shift_clock_passive_level_0_delay_enabled、 xmc_spi_ch_brg_shift_clock_output_sclk); /* 配置前导/后导延迟 */ XMC_SPI_CH_SetSlaveSelectDelay(spi_master_ch, 2U); /*已选择输入源*/ XMC_SPI_CH_SetinputSource(spi_master_ch, XMC_SPI_CH_INPUT_DIN0 ,USIC0_C0_DX0_P1_1); //P1.1 MasterInSlaveOut MISO_USIC0_CH0.DX0D GPIO 配置 master_rx_pin_config.mode = XMC_GPIO_MODE_INPUT_TRISTATE; XMC_GPIO_Init(master_rx_pin, 1, master_rx_pin_config); GPIO 配置 master_tx_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT7; XMC_GPIO_Init(master_tx_pin, 0, master_tx_pin_config); //P1.0 主输出从输入 MOSI_USIC0_CH0.DOUT0 /*GPIO 从站选择线路引脚配置*/ master_selo_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6; XMC_GPIO_Init(master_selo_pin, 13, master_selo_pin_config); //P0.13 ChipSelect_USIC0_CH0.SELO4 GPIO 配置 master_clck_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6; //P0.7 Clock_USIC0_CH0.SCLKOUT XMC_GPIO_Init(master_clck_pin, 7, master_clck_pin_config); /*启动 SPI*/ XMC_SPI_CH_Start(spi_master_ch); /* 启动 RC522 */ MFRC522_Init(); 而 (1U) { 如果 (MFRC522_Check(CardID) == MI_OK) { XMC_GPIO_ToggleOutput(LED0); } } 下面是 RC522 修改后的代码: 外接 XMC_USIC_CH_t *spi_master_ch; uint16_t SPI1SendByte(uint16_t data) { uint16_t uiDataReceived = 0x00; //XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4); XMC_SPI_CH_Transmit(spi_master_ch, data, XMC_SPI_CH_MODE_STANDARD); /*等待字节传送完毕*/ while((XMC_SPI_CH_GetStatusFlag(spi_master_ch) XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) ==0U) { /* 等待 ACK */ } XMC_SPI_CH_ClearStatusFlag(spi_master_ch,XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION); //XMC_SPI_CH_DisableSlaveSelect(spi_master_ch); // while((XMC_SPI_CH_GetStatusFlag(spi_master_ch) (XMC_SPI_CH_STATUS_FLAG_RECEIVE_INDICATION |) // xmc_spi_ch_status_flag_alternative_receive_indication)) ==0u) // { // /* 等待 ACK */ // } uiDataReceived = XMC_SPI_CH_GetReceivedData(spi_master_ch); 返回 uiDataReceived; } uint16_t test4=0; void SPI1_WriteReg(uint8_t address, uint8_t value) { // cs_reset(); XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4); SPI1SendByte(address); SPI1SendByte(value); XMC_SPI_CH_DisableSlaveSelect(spi_master_ch); // cs_set();; } uint8_t SPI1_ReadReg(uint8_t address) { uint8_t val; // cs_reset(); XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4); SPI1SendByte(address); val = SPI1SendByte(0x00); XMC_SPI_CH_DisableSlaveSelect(spi_master_ch); // cs_set(); return val; } |
|
相关推荐
1个回答
|
|
首先,我们需要确保 SPI 设置和引脚布局是正确的。根据您提供的代码片段,我们可以逐步检查并找出可能的问题。
1. 确保 SPI 通道已正确初始化: 确保您已经正确初始化了 XMC_SPI0_CH0,包括设置 SPI 时钟、数据速率等。 2. 检查引脚配置: 根据您的代码,您已经为 SPI 设置了接收、发送、选择和时钟引脚。请确保这些引脚与您的硬件连接正确。 3. 检查 SPI 初始化函数: 确保您已经调用了 SPI 初始化函数,例如 `XMC_SPI_CH_Init`,以正确配置 SPI 通道。 4. 检查 MFRC522 初始化代码: 确保您已经正确初始化了 MFRC522 模块,包括设置 SDA 和 SCK 引脚。 5. 检查 SPI 通信代码: 确保您的 SPI 通信代码是正确的,包括发送和接收数据。您可以参考 MFRC522 的数据手册来了解如何与其进行通信。 6. 检查错误处理: 在您的代码中添加错误处理,以便在出现问题时能够及时发现并解决。 7. 使用调试工具: 使用调试工具(如断点、监视窗口等)来检查 SPI 通信过程中的数据和状态。 8. 检查硬件连接: 确保您的硬件连接正确,包括电源、地线、SPI 引脚等。 9. 参考示例代码: 查找一些关于 XMC 和 MFRC522 的示例代码,以便更好地了解如何正确设置和通信。 通过以上步骤,您应该能够找到代码中的问题并解决它们。如果问题仍然存在,请提供更详细的代码和错误信息,以便我们能够更具体地帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
2496 浏览 2 评论
3964 浏览 9 评论
请问TLE5012B_E1000 启动后为什么位置不能正确获取
3437 浏览 9 评论
1108 浏览 8 评论
3383 浏览 7 评论
265浏览 2评论
107浏览 2评论
230浏览 2评论
TLE9879_BLDC电机启动需要用手拨一下才能转动,怎么解决?
2510浏览 2评论
如果是打开已有的dave工程,怎么查看这个工程选择的mcu型号?
255浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 07:19 , Processed in 0.547099 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号