完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大侠,我刚开始接触STM32F103VCT6,关于SPI1的数据发送的一些疑问,请帮忙!写了一个测试程序(SPI Master Mode),每秒定时发送数据,SPI部分的程序如下:
/* SPI1初始化*/ GPIO_InitTypeDef GPIO_InitStruct; SPI_InitTypeDef SPI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; /* Enable GPIOA and SPI1 clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /* Enable the SPI1 Pins Software Remapping */ GPIO_PinRemapConfig(GPIO_Remap_SPI1, DISABLE); /* Connect PXx to SPI1_NSS(PA.4) */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_SetBits(GPIOA, GPIO_Pin_4); /* Connect PXx to SPI1_SCK(PA.5) and SPI1_MOSI(PA.7) */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_5; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); /* Connect PXx to SPI1_MISO(PA.6) */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG; GPIO_Init(GPIOA, &GPIO_InitStruct); /* SPI1 configuration -------------------------------------*/ SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStruct); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); SPI_Cmd(SPI1, ENABLE); /* NVIC configuration */ /* Configure the Priority Group to 2 bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Enable the SPI1 Interrupt */ NVIC_InitStruct.NVIC_IRQChannel = SPI1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); 主程序中每1s进行SPI1数据发送。 if(net_spi1_flag == 1) { net_spi1_flag = 0; GPIO_ResetBits(GPIOA, GPIO_Pin_4); for(test_num=0; test_num<255; test_num++) { for(test_len=0; test_len<255; test_len++) { SPI_I2S_SendData(SPI1, net_spi1_data[test_len]); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); } } GPIO_SetBits(GPIOA, GPIO_Pin_4); } 问题:在程序中只开启了SPI1得接收中断,而没有开启发送中断,每次SPI1发送数据时,都会进入到SPI1中断服务程序中。SPI1的中断服务程序如下: void SPI1_IRQHandler(void) { static uint8_t spi_num=0; if(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != RESET) { spi_num++; } } 请不吝赐教! |
|
相关推荐
8个回答
|
|
帮顶。。。。。。。。。。。。。
|
|
|
|
还不会,帮顶
|
|
|
|
|
|
|
|
发送是clok上有没有波形?
|
|
|
|
楼主看一下进入中断以后,中断寄存器的值 SPI 状态寄存器(SPI_SR)
|
|
|
|
嗯。打印寄存器值看看有没有变化
|
|
|
|
不懂,帮顶
|
|
|
|
学习了!!!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
657 浏览 0 评论
2334 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2137 浏览 3 评论
4767 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2282 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 09:49 , Processed in 0.727035 second(s), Total 55, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号