2481|1

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

大家来看看STM32的串口程序,不知道哪里错了,望高手指点一二、、、 [复制链接]

#include"stm32f10x.h"
#include"delay.h"
void RCC_config(void);
void USART_Config(void);
void USART_GPIOInit(void);
void Put_String(u8 *p);
int main()
{
RCC_config();
USART_GPIOInit();
USART_Config();

Put_String("String");
while(1)
{  
   while(1)   
   {
    Put_String("String");
    if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
    {
      
      USART_SendData(USART1, USART_ReceiveData(USART1));
    }
   }  
}
}

/**********************************
函数名称:RCC_config(void)
函数功能:实现系统时钟的初始化
入口参数:无
出口参数:无
时间    :11.12.20
***********************************/
//void RCC_config(void)
//{
// ErrorStatus HSEStartUpStatus;
  //RCC_DeInit();
  //RCC_HSEConfig(RCC_HSE_ON);
  //HSEStartUpStatus=RCC_WaitForHSEStartUp();
  //if(HSEStartUpStatus==SUCCESS)
    // {
          // RCC_HCLKConfig(RCC_SYSCLK_Div1);
          // RCC_PCLK2Config(RCC_HCLK_Div1);
           //RCC_PCLK1Config(RCC_HCLK_Div2);
           //RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
           //RCC_PLLCmd(ENABLE);
           //while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
          // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
          // while(RCC_GetSYSCLKSource()!=0x08);

         //}
         

//}
/*************************************************
函数: void RCC_Config(void)
功能: 配置系统时钟  
参数: 无
返回: 无
**************************************************/
void RCC_config(void)
{
ErrorStatus HSEStartUpStatus;//定义外部高速晶体启动状态枚举变量
RCC_DeInit();//复位RCC外部设备寄存器到默认值
RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部高速时钟准备好
if(HSEStartUpStatus == SUCCESS)//外部高速时钟已经准别好
   {

    RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB(HCLK)时钟等于==SYSCLK
    RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)钟==AHB时钟
    RCC_PCLK1Config(RCC_HCLK_Div2);//配置APB1(PCLK1)钟==AHB1/2时钟
      
      
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
    //配置PLL时钟 == 外部高速晶体时钟*9

      RCC_PLLCmd(ENABLE);//使能PLL时钟
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟就绪
       {
       }
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟 = PLL时钟
   
      while(RCC_GetSYSCLKSource() != 0x08) //检查PLL时钟是否作为系统时钟
       {
       }
   }
   //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
   //打开GPIOD和AFIO时钟
   //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能串口2时钟
}
/*************************************
函数名称:
函数功能:
入口参数:
出口参数:
时间:
**************************************/
void USART_Config(void)
{
   USART_InitTypeDef USART_InitStructure;
   USART_ClockInitTypeDef USART_ClockInitStructure;       
   //USART_DeInit(USART1);
   USART_InitStructure.USART_BaudRate = 9600;          
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;
   USART_InitStructure.USART_StopBits = USART_StopBits_1;
   USART_InitStructure.USART_Parity = USART_Parity_No;
   USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

   USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;
   USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
   USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
   USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
   
   USART_Init(USART1,&USART_InitStructure);
   USART_ClockInit(USART1, &USART_ClockInitStructure);

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_AFIO,ENABLE);

   USART_Cmd(USART1,ENABLE);

}
void USART_GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStruct);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

}
void Put_String(u8 *p)
{
while(*p)
{
   USART_SendData(USART1, *p++);
   while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
   {
   
   }
}
}
点赞 关注

回复
举报

6

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
大家快来呀、、
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表