欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stm32 SPI+DMA阻塞方式,測試通過,有需要的可以下,誰有中斷方式麻煩教教我,感激不盡
[打印本頁]
作者:
JayLau
時間:
2018-8-9 10:13
標題:
stm32 SPI+DMA阻塞方式,測試通過,有需要的可以下,誰有中斷方式麻煩教教我,感激不盡
這個是SPI+DM1用的查詢方式,我要改成中斷方式一直沒成功,感覺好無助啊。。。。誰調過中斷的可以幫幫我嗎?
stm32單片機源程序如下:
#include "stm32f10x_lib.h"
#include "SPI_DMA.h"
#include "LED.h"
#include "delay.h"
extern vu8 SPI1_TX_Buff ;
extern vu8 SPI2_TX_Buff ;
extern vu8 SPI1_RX_Buff ;
extern vu8 SPI2_RX_Buff ;
void main( void )
{
u8 i ;
Stm32_Clock_Init(9);
delay_init(72);
SPI1_Configuration();
SPI2_Configuration();
SPI1_DMA_Configuration();
SPI2_DMA_Configuration();
LED_Init();
SPI1_SetSpeed( SPI_SPEED_256 );
DMA1_Channel2->CCR |= 1 << 0 ; //開啟DMA通道2
DMA1_Channel4->CCR |= 1 << 0 ; //開啟DMA通道4
DMA1_Channel5->CCR |= 1 << 0 ; //開啟DMA通道5
DMA1_Channel3->CCR |= 1 << 0 ; //開啟DMA通道3
while( ( DMA1->ISR & (1<<17) ) == 0 ) ; //等待通道5傳輸完成
while( ( DMA1->ISR & (1<<9) ) == 0 ) ; //等待通道3傳輸完成
while( ( DMA1->ISR & (1<<13) ) == 0 ) ; //等待通道4傳輸完成
while( ( DMA1->ISR & (1<<5) ) == 0 ) ; //等待通道2傳輸完成
if(SPI1_RX_Buff == SPI2_TX_Buff) LED_ON; //如果SPI1接收的SPI2發送數據相同
else LED_OFF ; //點亮LED
delay_ms(1000);
LED_OFF;
delay_ms(1000);
if(SPI2_RX_Buff == SPI1_TX_Buff) LED_ON; //如果SPI2接收的SPI1發送數據相同
else LED_OFF ; //點亮LED
delay_ms(1000);
LED_OFF;
delay_ms(1000);
//第二次傳輸
DMA1_Channel2->CCR &= ~(1 << 0) ; //關閉DMA通道2
DMA1_Channel4->CCR &= ~(1 << 0) ; //關閉DMA通道4
DMA1_Channel5->CCR &= ~(1 << 0) ; //關閉DMA通道5
DMA1_Channel3->CCR &= ~(1 << 0) ; //開啟DMA通道3
SPI2_TX_Buff = 0x87; //對SPI2的發送緩沖重新賦值
SPI1_TX_Buff = 0x67; //對SPI1的發送緩沖重新賦值
DMA1->IFCR = 0xff ; //清除DMA傳輸完成標志
SPI1_SetSpeed( SPI_SPEED_2 ); //改變SPI的速度
DMA1_Channel2->CNDTR = buffersize ; //傳輸數量設置為buffersize個
DMA1_Channel3->CNDTR = buffersize ; //傳輸數量設置為buffersize個
DMA1_Channel4->CNDTR = buffersize ; //傳輸數量設置為buffersize個
DMA1_Channel5->CNDTR = buffersize ; //傳輸數量設置為buffersize個
DMA1_Channel2->CCR |= 1 << 0 ; //開啟DMA通道2
DMA1_Channel4->CCR |= 1 << 0 ; //開啟DMA通道4
DMA1_Channel5->CCR |= 1 << 0 ; //開啟DMA通道5
DMA1_Channel3->CCR |= 1 << 0 ; //開啟DMA通道3
while( ( DMA1->ISR & (1<<17) ) == 0 ) ;
while( ( DMA1->ISR & (1<<9) ) == 0 ) ;
while( ( DMA1->ISR & (1<<13) ) == 0 ) ;
while( ( DMA1->ISR & (1<<5) ) == 0 ) ;
if(SPI1_RX_Buff == SPI2_TX_Buff) LED_ON;
else LED_OFF ;
delay_ms(1000);
LED_OFF;
delay_ms(1000);
if(SPI2_RX_Buff == SPI1_TX_Buff) LED_ON;
else LED_OFF ;
while(1)
{}
}
復制代碼
所有資料51hei提供下載:
SPI_DMA.rar
(242.77 KB, 下載次數: 50)
2018-8-9 16:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
askloser
時間:
2019-2-26 08:58
學習參考看看
作者:
laigs218
時間:
2019-2-26 18:56
首先 SPI 的NVIC 宣告
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 1 bit for pre-emption priority, 3 bits for subpriority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* Configure and enable SPI1 interrupt -------------------------------------*/
NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Configure and enable SPI2 interrupt -------------------------------------*/
NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStructure);
}
stm32中斷應使用在 stm32f10x_it.c
Main Interrupt Service Routines
Example
void SPI1_IRQHandler(void)
{
if (SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_TXE) != RESET)
{
/* Send SPI1 data */
SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[TxIdx++]);
/* Disable SPI1 TXE interrupt */
if (TxIdx == BufferSize)
{
SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, DISABLE);
}
}
}
作者:
13825283634
時間:
2019-8-28 17:14
51黑有你更精彩!!!
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1