#include<stm32f10X_lib.h>
typedef unsigned long uint32;
typedef unsigned short uint16;
typedef unsigned char uint8;
typedef signed long int32;
typedef signed short int16;
typedef signed char int8;
static uint8 fac_us=0;
static uint16 fac_ms=0;
void PllInit(uint8 PLL)
{
RCC->CR |= 1<<16;
while(!(RCC->CR>>17));
  LL-=2;
RCC->CFGR |= (PLL<<18)|(1<<10);
FLASH->ACR|=0X32;
RCC->CR |= 1<<24;
while(!(RCC->CR>>25));
RCC->CFGR|= 0X02;
while(!(RCC->CFGR>>3));
}
void delayInit(uint8 SysTime)
{
SysTick->CTRL&=0<<2;
fac_us = SysTime/8;
fac_ms = fac_us*1000;
}
void delay_us(uint32 us)
{
SysTick->LOAD = us * fac_us;
SysTick->VAL = 0x00;
SysTick->CTRL|=1;
while(!(SysTick->CTRL>>16));
SysTick->VAL = 0x00;
SysTick->CTRL&=0xfffffffe;
}
void delay_ms(uint16 ms)
{
SysTick->LOAD = ms * fac_ms;
SysTick->VAL = 0x00;
SysTick->CTRL|=1<<0;
while(!(SysTick->CTRL>>16));
SysTick->VAL = 0x00;
SysTick->CTRL&=0xfffffffe;
}
void LedInit()
{
RCC->APB2ENR|=(1<<2)|(1<<5);
GPIOA->CRH |= 0x03;
GPIOD->CRL |= 0x0300;
GPIOA->ODR &=0x00;
GPIOD->ODR &=0x00;
}
void Uart1Init(uint32 pclk2,uint32 bound)
{
float temp;
uint16 mantissa,fraction;
temp = (float)(pclk2*1000000)/(bound*16);
mantissa=temp;
fraction= (temp-mantissa)*16;
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2;
RCC->APB2RSTR|=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 位停止,无校验位.
}
uint8 USART_RX_BUF[18]={'X','i','a','o','L','i','n',0xff,0xff,0xff};//接收缓冲,最大64个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
uint8 USART_RX_STA=0; //接收状态标记
void main()
{
uint8 t=0;
uint8 len;
uint16 times=0;
  llInit(9);
delayInit(72);
Uart1Init(72,9600);
delay_ms(1000);
while(1)
{
t=0;
while(USART_RX_BUF[t]!=0xff)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0x40)==0);
t++;
}
USART_RX_STA=0;
}
}
程序通过串口查询模式,发送数据,为什么不行呢?请大侠帮忙看看
|