初级会员

- 积分
- 77
- 金钱
- 77
- 注册时间
- 2016-4-5
- 在线时间
- 17 小时
|
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_dma.h"
#include "delay.h"
u8 USARTData1[10];
u16 DATA_LEN;
void HMISends(char *buf1) //×Ö·û′®·¢Ëíoˉêy
{
u8 i=0;
while(1)
{
if(buf1[i]!=0)
{
USART_SendData(USART3,buf1[i]); //·¢Ëíò»¸ö×Ö½ú
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET){};//μè′y·¢Ëí½áêø
i++;
}
else
return ;
}
}
void HMISendb(u8 k) //×Ö½ú·¢Ëíoˉêy
{
u8 i;
for(i=0;i<3;i++)
{
if(k!=0)
{
USART_SendData(USART3,k); //·¢Ëíò»¸ö×Ö½ú
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET){};//μè′y·¢Ëí½áêø
}
else
return ;
}
}
void HMISendm(u8 k)
{
if(k!=0)
{
USART_SendData(USART3,k); //·¢Ëíò»¸ö×Ö½ú
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET){};//μè′y·¢Ëí½áêø
}
}
void HMISendstart(void) //·¢ËíÖ¸áî3õê¼
{
delay_ms(200);
HMISendb(0xff);
delay_ms(200);
}
void LED_int()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void uart3_init(){
//GPIO¶Ë¿úéèÖÃ
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //ê1ÄüUSART1£¬GPIOAê±Öó
USART_DeInit(USART3); //¸′λ′®¿ú1
//USART1_TX PA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3ö
GPIO_Init(GPIOB, &GPIO_InitStructure); //3õê¼»ˉPA9
//USART1_RX PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
GPIO_Init(GPIOB, &GPIO_InitStructure); //3õê¼»ˉPA10
//Usart1 NVIC ÅäÖÃ
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//ÇàÕ¼óÅÏè¼¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×óóÅÏè¼¶3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μàê1Äü
NVIC_Init(&NVIC_InitStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷
//USART 3õê¼»ˉéèÖÃ
USART_InitStructure.USART_BaudRate = 9600;//ò»°ãéèÖÃÎa9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö3¤Îa8λêy¾Y¸ñê½
USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò»¸öí£Ö1λ
USART_InitStructure.USART_Parity = USART_Parity_No;//ÎTÆæÅ¼D£Ñéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎTó2¼têy¾Yá÷¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //êÕ·¢Ä£ê½
USART_Init(USART3, &USART_InitStructure); //3õê¼»ˉ′®¿ú
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);//¿aÆô¿ÕÏDÖD¶Ï
USART_Cmd(USART3, ENABLE); //ê1Äü′®¿ú
}
void DMA_Configuration()
{
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel3);
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&USART3->DR;
DMA_InitStructure.DMA_MemoryBaseAddr=(u32)USARTData1;
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=10;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA1_Channel3,&DMA_InitStructure);
}
void USART3_IRQHandler(void)
{
u8 j;
if(USART_GetITStatus(USART3,USART_IT_IDLE)!=RESET)
{
USART_ClearITPendingBit(USART2, USART_IT_IDLE);
DMA_Cmd(DMA1_Channel3,DISABLE);
DATA_LEN=10-DMA_GetCurrDataCounter(DMA1_Channel3);
if(DATA_LEN > 0)
{
for(j=0;j<DATA_LEN;j++)
{
HMISendm(USARTData1[j]);
}
DMA_Cmd(DMA1_Channel3, DISABLE);
DMA1_Channel3->CNDTR=DATA_LEN;//֮ǰÅäÖÃbufferÎa10 ′Ë′|¸ÄÎa½óêÕêy¾YμÄ′óD¡ ÏÂÃæÔú¸Ä»Ø10
DMA_Cmd(DMA1_Channel3, ENABLE);
}
DMA_Cmd(DMA1_Channel3, DISABLE);
DMA1_Channel3->CNDTR=10;
DMA_Cmd(DMA1_Channel3, ENABLE);
DMA_Cmd(DMA1_Channel3,ENABLE);
}
}
int main()
{
delay_init();
uart3_init();
DMA_Configuration();
LED_int();
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
delay_ms(20000);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
delay_ms(20000);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
delay_ms(20000);
GPIO_SetBits(GPIOC,GPIO_Pin_13);
USART_DMACmd(USART3, USART_DMAReq_Rx, ENABLE);
DMA_Cmd(DMA1_Channel3,ENABLE);
while(1)
{
}
}
|
|