OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8715|回复: 2

关于串口查询程序,请各位大侠帮忙改错

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2012-4-12
在线时间
0 小时
发表于 2012-7-1 14:50:08 | 显示全部楼层 |阅读模式

#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;
 }

}
程序通过串口查询模式,发送数据,为什么不行呢?请大侠帮忙看看

好好学习,天天向上
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-7-1 15:20:34 | 显示全部楼层
参考我们的例程就好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2012-7-9 01:25:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 14:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表