欢迎来到天天文库
浏览记录
ID:42464505
大小:254.02 KB
页数:4页
时间:2019-09-15
《STM32关于SPI2因为DMA通道而异常发送CRC问题描述》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SMT32105SPI2DMAl_Channel5CRCUSART1理internal►DMA1request现象描述:同时使用SPI2和USART1时,SPI2的数据会异常多发送一个字节数据,实际监控到,每次肖USART1接收到I古I定长度的数据后,SPI2就会自己多发送一帧数据。问题原因:1.DMA通道问题:STM32105的SPI2发送和USART1的接收都归同一个DMA1Channel5USART3.RXTIM1.CH2TIM3.CH4TIM3.UPSPI1.TXUSART1.TXTIM1.CH4timiJrigTIM1.COMTIM4-CH2SPI/I2S2_R
2、XI2C2.TXUSART1.RXTIM1.UPSPH2S2.TXTIM2.CH1TIM4-CH3I2C2_RXUSART2_RXTIM1.CH3TIM3.CH1TIM3TRIG但是使用时,一个DMA通道下最好只管理一个外设,否则多个设备复用一个通道处理会很复杂,稍微处理不好就会出异常,为了避免复用,笔者只使用DMAl_Channel5管理USART1,但是使川中还是出了问题,这里我们看到DMAl_Channel5下还冇其他外设,如果用DMA管理其他外设,SPI2也会出现问题,具体问题我们下面详细描述。2、SPI设置问题:笔者使用吋,SPI作为主设备,全双工模式,通讯时,
3、如果开启了CRC校验,发送数据吋就会界常,会莫名奇妙多发送一帧数据,后来发现和USART1的接收有关,其实是因为DMAl_Channel5的管理问题,这里附上SPI2的设置,供人家参考,特殊标注的部分就是出问题的CRC部分,需要关掉才好使。voidSPI2_lnit(void){SPI_lnitTypeDefSPI」nitStructure;//DMA_lnitTypeDefDMA」nitStructure;GPIO_lnitTypeDefGPIO」nitStructure;/*EnableSPI2andGPIOclocks*//*!4、SPIFLASHSPIMOSIGPIO,SPIFLASHSPIMISOGPIO,SPIFLASHSPIDETECTGPIOandSPI_FLASH_SPI_SCK_GPIOPeriphclockenable*/RCC_APBlPeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/*!5、ASH_SPIpins:SCK*/GPIOInitStructure.GPIOPin=GPIOPin13;GPIO」nitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIOInitStructure.GPIOMode=GPIOModeAFPP;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!6、ConfigureSPI_FLASH_SPIpins:MOSI♦/GPIOInitStructure.GPIOPin=GPIOPin15;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!7、SH:ChipSelecthigh*/SPI_CS_HIGH();/*SPI1configuration*///W25X16:datainputontheDIOpinissampledontherisingedgeoftheCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK.SPISPISPISPISPISPISPIInitStructure.SPIInitStructure.SPIInitStructure.SPIInitStructure.SPIIni
4、SPIFLASHSPIMOSIGPIO,SPIFLASHSPIMISOGPIO,SPIFLASHSPIDETECTGPIOandSPI_FLASH_SPI_SCK_GPIOPeriphclockenable*/RCC_APBlPeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);/*!5、ASH_SPIpins:SCK*/GPIOInitStructure.GPIOPin=GPIOPin13;GPIO」nitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIOInitStructure.GPIOMode=GPIOModeAFPP;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!6、ConfigureSPI_FLASH_SPIpins:MOSI♦/GPIOInitStructure.GPIOPin=GPIOPin15;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!7、SH:ChipSelecthigh*/SPI_CS_HIGH();/*SPI1configuration*///W25X16:datainputontheDIOpinissampledontherisingedgeoftheCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK.SPISPISPISPISPISPISPIInitStructure.SPIInitStructure.SPIInitStructure.SPIInitStructure.SPIIni
5、ASH_SPIpins:SCK*/GPIOInitStructure.GPIOPin=GPIOPin13;GPIO」nitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIOInitStructure.GPIOMode=GPIOModeAFPP;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!6、ConfigureSPI_FLASH_SPIpins:MOSI♦/GPIOInitStructure.GPIOPin=GPIOPin15;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!7、SH:ChipSelecthigh*/SPI_CS_HIGH();/*SPI1configuration*///W25X16:datainputontheDIOpinissampledontherisingedgeoftheCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK.SPISPISPISPISPISPISPIInitStructure.SPIInitStructure.SPIInitStructure.SPIInitStructure.SPIIni
6、ConfigureSPI_FLASH_SPIpins:MOSI♦/GPIOInitStructure.GPIOPin=GPIOPin15;GPIO」nit(GPIOB,&GPIO」nitStructure);/*!7、SH:ChipSelecthigh*/SPI_CS_HIGH();/*SPI1configuration*///W25X16:datainputontheDIOpinissampledontherisingedgeoftheCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK.SPISPISPISPISPISPISPIInitStructure.SPIInitStructure.SPIInitStructure.SPIInitStructure.SPIIni
7、SH:ChipSelecthigh*/SPI_CS_HIGH();/*SPI1configuration*///W25X16:datainputontheDIOpinissampledontherisingedgeoftheCLK.//DataontheDOandDIOpinsareclockedoutonthefallingedgeofCLK.SPISPISPISPISPISPISPIInitStructure.SPIInitStructure.SPIInitStructure.SPIInitStructure.SPIIni
此文档下载收益归作者所有