试试发帖。重发一下:
////test.c
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
//Mini STM32??·?°?·????ú??3
//???????é
//?????×?@ALIENTEK
//????????:www.openedv.com
int main(void)
{
u8 t;
u8 len;
u16 times=0;
Stm32_Clock_Init(9); //?????±???è??
delay_init(72); //???±??????
uart_init(72,9600); //????????????9600
LED_Init(); //????????LED??????????????
while(1)
{
if(USART_RX_0D0A_STA&0x80)
{
len=USART_RX_STA;//?????????????????????¤??
printf("\r\n?ú·???????????(??%d??×???):\r\n",len);
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//????·????á??
}
printf("\n\n");//????????
// USART_RX_0D0A_STA=0;
USART1_mem_init();
}else
{
times++;
if(times%5000==0)
{ times=0;
printf("???°?á??:\r\n\r\n\r\n");
printf("\r\nMiniSTM32??·?°? ???????é\r\n");
printf("??????????,???????ü?á??\r\n");
}
// if(times%200==0)printf("??????????,???????ü?á??\r\n");
if(times%30==0)LED0=!LED0;//????LED,?á??????????????.
delay_ms(10);
}
}
}
///////////////////
#ifdef EN_USART1_RX //??????????????
//????1????·??????ò
//×???,????USARTx->SR??±??????????????í?ó
u8 USART_RX_BUF[64]; //????????,×??ó64??×???.
//????×???
//bit7???????ê??±ê??
//bit6????????0x0d
//bit5~0?????????????§×???????
u8 USART_RX_STA=0; //????×???±ê?? :?????ó???????????¤??????????
u8 USART_RX_0D0A_STA=0;
///????0d,????0A:??????????????±ê????????????64×???????
// ?????????????????§±?????±??¤??????????????????
void USART1_mem_init(void)
{
USART_RX_STA=0;
USART_RX_0D0A_STA=0;
}
void USART1_IRQHandler(void)
{
u8 res;
if(USART1->SR&(1<<5))//??????????:???????????÷
{
res=USART1->DR;
if((USART_RX_0D0A_STA&0x80)==0)//???????ê??
{
if(USART_RX_0D0A_STA&0x40)//????????0x0d
{
if(res!=0x0a)USART_RX_0D0A_STA=0;//?????í?ó,????????
else USART_RX_0D0A_STA|=0x80; //?????ê????
}else //????????0X0D
{
if(res==0x0d)USART_RX_0D0A_STA|=0x40;
else
{
// USART_RX_BUF[USART_RX_STA&0X3F]=res;
USART_RX_BUF[USART_RX_STA]=res;//??????????????????????64×???????????256????
USART_RX_STA++;
if(USART_RX_STA>252)
USART_RX_STA=0;//?????????í?ó,????????????
}
}
}
}
}
#endif
//??????IO ????1
//pclk2 CLK2?±??????(Mhz)
//bound:?¨????
//CHECK OK
//091209
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//????USARTDIV
mantissa=temp; //??????????·?
fraction=(temp-mantissa)*16; //??????????·?
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //????PORTA???±??
RCC->APB2ENR|=1<<14; //?????????±??
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO×????è??
RCC->APB2RSTR|=1<<14; //????????1
RCC->APB2RSTR&=~(1<<14);//????????
//?¨?????è??
USART1->BRR=mantissa; // ?¨?????è??
USART1->CR1|=0X200C; //1??????,?????é??.
#ifdef EN_USART1_RX //??????????????
//????????????
USART1->CR1|=1<<8; //PE????????
USART1->CR1|=1<<5; //??????????·???????????
MY_NVIC_Init(3,3,USART1_IRQChannel,2);//×é2??×?????????
#endif
}
|