[mw_shl_code=c,true]#if EN_USART1_RX //??????????????
void USART1_IRQHandler(void) //?®??1????·??????ò
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //????????
{
Res = USART_ReceiveData(USART1);//(USART1->DR); //???????????????? ????×??? 0xbd 0xdb
USART_RX_BUF[USART_RX_STA]=Res ;
USART_RX_STA++;
if(USART_RX_STA == 2)
{
USART_RX_STA = 0;
if((USART_RX_BUF[0] == 0xbd)&&(USART_RX_BUF[1] == 0xdb))
{
MYDMA_Enable(); //?ò??DMA????
}
else
{}
}
}
}
#endif [/mw_shl_code]
[mw_shl_code=c,true]#include "dma.h"
u8 ReceiveBuff[32];
u16 Roll ;
u16 Pitch ;
u16 Yaw;
u16 sign;
float ROLL_N ;
float PITCH_N ;
float YAW_N ;
float volt3n ;
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
u16 DMA1_MEM_LEN;//±???DMA???????????????¤??
//DMA1???÷?¨??????
//???????????????????¨??,???????ù?????????é????????
//?????è->?????÷???? /8???????í?? /?????÷????????
//DMA?¨??DMA1_Channel5 ?®???????¨??
//cpar:???è???·
//cmar:?????÷???·
//cndtr:??????????
void MYDMA_Config(u32 cpar,u32 cmar,u16 cndtr)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //????DMA????
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel5_IRQn; //??????????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
DMA_DeInit(DMA1_Channel5); //??DMA???¨??5?????÷???è???±????
DMA1_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMA???èUSART_RX?ù???·
DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMA?????ù???·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //????????·??ò???????è????·?????????
DMA_InitStructure.DMA_BufferSize = cndtr; //DMA?¨????DMA???????ó??
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //???è???·?????÷??±?
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //???????·?????÷????
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //?????í????8??
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //?????í????8??
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //?¤×÷??????????????
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA?¨?? x????????????
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA?¨??x?????è??????????????????
DMA_Init(DMA1_Channel5, &DMA_InitStructure); //?ù??DMA_InitStruct?????¨????????????DMA???¨??USART1_Tx_DMA_Channel?ù±ê?????????÷
DMA_ITConfig(DMA1_Channel5,DMA_IT_TC,ENABLE);//????DMA?????ê?ú?ú????
}
//????????DMA????
void MYDMA_Enable(void)
{
DMA_Cmd(DMA1_Channel5, DISABLE ); //??±?USART1 TX DMA1 ?ù???????¨??
DMA_SetCurrDataCounter(DMA1_Channel5,DMA1_MEM_LEN);//DMA?¨????DMA???????ó?? 32Bit
DMA_Cmd(DMA1_Channel5, ENABLE); //????USART1 RX DMA1 ?ù???????¨??
} [/mw_shl_code]
附上串口接收中断和DMA配置函数
|