帮看看串口通信用不了

2019-03-23 19:35发布

//用的是STM32F107VCT  25MHz的外部晶振
//固件库是V3.5的
//想实现串口通信(USART2),却怎么也发不出去数据,求看看是哪里出错了,我新手。。。谢谢啦!

#include "stm32f10x.h"




void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);



int main()
{
        vu16 i=0,k=0;
        u8 Reset[4]={0x56,0x00,0x26,0x00};
        u8 ReceiveCmd[9];
        RCC_Configuration();
        GPIO_Configuration();
        USART_Configuration();

        for(i=0;i<4;i++)
        {
                USART_SendData(USART2,Reset);//发送数据;
                while(USART_GetFlagStatus(USART2,USART_IT_TXE)==RESET)//等待数据是否发送完毕
                {
                }                                       

        }
        while(k<4)
        {
                if(USART_GetFlagStatus(USART2,USART_IT_RXNE)==SET)//是否接到数据
                {
                         ReceiveCmd[k]=USART_ReceiveData(USART2);//接受数据
                         k++;
                }
        }
        k=0;

       
       

}
void RCC_Configuration(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);
                FLASH_SetLatency(FLASH_Latency_2);
                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
                RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_5);
                RCC_PLLCmd(ENABLE);
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
                while(RCC_GetSYSCLKSource()!=0x08);

        }
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
           RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
       
}
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
}
void USART_Configuration(void)
{
        USART_InitTypeDef USART_InitStructure;


        USART_InitStructure.USART_BaudRate=38400;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;
        USART_InitStructure.USART_StopBits=USART_StopBits_1;
        USART_InitStructure.USART_Parity=USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
        USART_Init(USART2,&USART_InitStructure);

        USART_Cmd(USART2,ENABLE);

} 此帖出自小平头技术问答
0条回答

一周热门 更多>