stm32初学者 求教串口通信的问题

2019-03-23 18:50发布

#include "stm32f10x.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
//void NVIC_Configuration(void);
void USART_Config(void);
int main()
{
      RCC_Configuration();
      GPIO_Configuration();
      NVIC_Configuration();
      USART_Config();
          while(1)
          {
              USART_SendData(USART1, 0x0d);
          }

}
void RCC_Configuration()
{
   SystemInit();
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE);
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 , ENABLE);
}

void GPIO_Configuration()
{
      GPIO_InitTypeDef GPIO_InitStructure;
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                     //LED1控制--PB5
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                         //推挽输出
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOB, &GPIO_InitStructure);                                         
       
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                  //USART1 TX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                     //复用推挽输出
          GPIO_Init(GPIOA, &GPIO_InitStructure);                                     //A端口
       
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                          //USART1 RX
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;            //复用浮空输入
          GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/*void NVIC_Configuration()
{
            //  结构声明
          //NVIC_InitTypeDef NVIC_InitStructure;
       
          /* Configure the NVIC Preemption Priority Bits */  
          /* Configure one bit for preemption priority */
          /* 优先级组 说明了抢占优先级所用的位数,和响应优先级所用的位数   在这里是0, 4
          0组:  抢占优先级占0位, 响应优先级占4位
          1组:  抢占优先级占1位, 响应优先级占3位
          2组:  抢占优先级占2位, 响应优先级占2位
          3组:  抢占优先级占3位, 响应优先级占1位
          4组:  抢占优先级占4位, 响应优先级占0位  
          */                                
         /* NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);            
       
          NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;                                     //设置串口1中断
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                     //抢占优先级 0
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                                //子优先级为0
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                        //使能
          NVIC_Init(&NVIC_InitStructure);
}  */

void USART_Config()
{
          USART_InitTypeDef USART_InitStructure;
          USART_InitStructure.USART_BaudRate = 9600;                                                //速率115200bps
          USART_InitStructure.USART_WordLength = USART_WordLength_8b;                //数据位8位
          USART_InitStructure.USART_StopBits = USART_StopBits_1;                        //停止位1位
          USART_InitStructure.USART_Parity = USART_Parity_No;                                //无校验位
          USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;   //无硬件流控
          USART_InitStructure.USART_Mode = USART_Mode_Tx;                                        //收发模式
          USART_Init(USART1, &USART_InitStructure);                                                        //配置串口参数函数
          USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                    //使能接收中断
          USART_ITConfig(USART1, USART_IT_TXE, ENABLE);                                                //使能发送缓冲空中断
          USART_Cmd(USART1, ENABLE);
       
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。