完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
CH573F,调试SPI从机,功能已经OK,经过IO定向,用在PB口这一组SPI,
我将PA15,用作一个检测输入,配置为上拉,中断,测试到主机访问MCU时,改IO口会误检测。 产生中断信号,实际测量PB口的SPI通讯时,PA15会随着CS信号产生低电平。 硬件确认两个PIN是没有短路的,将PA15悬空,用示波器抓也确定是有干扰。 是否还有什么原因呢问题没有考虑到的呢? 下图为MCU的SPI初始化。 //SPI0 初始化 void userSPI0Init(void) { //PRINT( "SPI0 Initn"); GPIOPinRemap( ENABLE, RB_PIN_SPI0 );//SPI0重映射到PB口 GPIOB_ModeCfg( GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15, GPIO_ModeIN_Floating ); SPI0_SlaveInit(); SetFirstData(0xA5); SPI0_ITCfg( ENABLE, RB_SPI_IE_FST_BYTE); PFIC_EnableIRQ( SPI0_IRQn ); R8_SPI0_CTRL_CFG &= ~RB_SPI_DMA_ENABLE;//关闭DMA spiSendData.u32Data = 0; } //SPI0 中断服务函数 //调试pritf时,要主要主机时钟不要太快。 __attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void SPI0_IRQHandler(void) { UINT8 temp; if(SendOrRecvMode == RECEIVE_MODE)//接收模式 { if(SPI0_GetITFlag(RB_SPI_IF_FST_BYTE)) { temp = (UINT8)(R8_SPI0_BUFFER); //PRINT("CMD_%02Xn", temp); SPI0_ClearITFlag(RB_SPI_IF_FST_BYTE);//重置首字节接收中断标记 SPI0_ClearITFlag(RB_SPI_IF_BYTE_END); SPI0_ITCfg( ENABLE, RB_SPI_IE_BYTE_END);//启用字节传输完成中断 rwFlag = (UINT8)(temp&0x80?MCU_CMD_READ:MCU_CMD_WRITE); recCMD = (UINT8)(temp&0x7f); if(rwFlag == MCU_CMD_READ)//读指令,即将进入发送模式 { SendOrRecvMode = SEND_MODE; readCommandProcess(recCMD);//刷新spiSendBuff内容4个字节。 GPIOB_ModeCfg(SPI_MISO_PIN, GPIO_ModeOut_PP_5mA);//配置MISO发送 R8_SPI0_CTRL_MOD &= ~RB_SPI_FIFO_DIR; //配置FIFO方向为发送 rCnt = 0; R8_SPI0_FIFO = spiSendData.u8Buff[rCnt]; //PRINT("S_%d %02Xn", rCnt, R8_SPI0_FIFO); rCnt++; } else { rCnt = 0; //PRINT("SPI_Rn"); } } else if(SPI0_GetITFlag(RB_SPI_IF_BYTE_END))//接收完单个字节 { if(rCnt < SPI_BUFF_LEN) { recOK = 1; spiRecData.u8Buff[rCnt] = (UINT8)(R8_SPI0_BUFFER); //PRINT("R = %02Xn", spiRecData.u8Buff[rCnt]); rCnt++; } SPI0_ClearITFlag(RB_SPI_IF_BYTE_END); } } else//指令已经成立,发送模式 { if(SPI0_GetITFlag(RB_SPI_IF_BYTE_END))//接收完单个字节 { R8_SPI0_FIFO = spiSendData.u8Buff[rCnt]; //PRINT("S_%d %02Xn", rCnt, R8_SPI0_FIFO); rCnt++; SPI0_ClearITFlag(RB_SPI_IF_BYTE_END); } } } |
|
相关推荐
1个回答
|
|
PA15不要开启上拉模式,可以设置下拉或者推挽输出,这样就没有影响了。
|
|
|
|
只有小组成员才能发言,加入小组>>
518 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2901 浏览 2 评论
2397 浏览 1 评论
862浏览 2评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
403浏览 1评论
681浏览 1评论
riscv-none-embed-objcopy: \'PWM_Output.elf\': No such file这个咋解决,
413浏览 1评论
516浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 21:37 , Processed in 1.036464 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号