STM32F107,UART发送错误数据

2019-03-23 18:16发布

小弟初学STM32F以前玩过51单片机,现在搞这个对使用ST的库相对还不是很适应,按照教程创建了一个MDK工程,添加了V3.5的库,main里做了GPIO测试没有问题,但是使用UART却出了问题,我使用的是STM32F107VCT6,使用它的USART1端口重新映射到了PB6,PB7,我打算不断发送一个字节0x24,可是我用PC收到的却是0xF9,搞了好几天都没搞定,求助各位大侠指点,谢谢啦~~~~~~~~!!!! 代码如下: void usart_init(void)   
{
 GPIO_InitTypeDef GPIO_InitStructure;
 USART_InitTypeDef USART_InitStructure;  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
   GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//串口1重映射
  
   // USART1_TX -> PB6 , USART1_RX -> PB7
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;         
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
  GPIO_Init(GPIOB, &GPIO_InitStructure);        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  USART_StructInit(&USART_InitStructure);
    USART_InitStructure.USART_BaudRate = 115200;    //设置波特率为115200//
    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_Mode = USART_Mode_Rx | USART_Mode_Tx;    //发送与接收//
    USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;   //没有硬件流控//
  USART_Init(USART1, &USART_InitStructure);  //对串口1进行初始化
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  //接收的中断使能打开:
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);  //发送的中断使能打开
  USART_Cmd(USART1 , ENABLE); } //发送函数 void SendByte(char ch)
{
 USART_SendData(USART1, (char) ch);
   while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
   {}
}   //延时函数 void Delay(void)
{
 unsigned long ik;
 for(ik=0;ik<0xffff8;ik++);
} //指示灯初始化 void GPIO_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStruct;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15;    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStruct);     } //main int main (void)
{
 /* Setup STM32 system (clock, PLL and Flash configuration) */
   SystemInit();
  GPIO_Config();
  usart_init();
  while (1)
  {
 GPIO_SetBits(GPIOB,GPIO_Pin_0);
 GPIO_SetBits(GPIOB,GPIO_Pin_1);
 GPIO_SetBits(GPIOB,GPIO_Pin_14);
 GPIO_SetBits(GPIOB,GPIO_Pin_15);
 Delay();
 Delay();
 Delay();
 GPIO_ResetBits(GPIOB,GPIO_Pin_0);
 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
 GPIO_ResetBits(GPIOB,GPIO_Pin_14);
 GPIO_ResetBits(GPIOB,GPIO_Pin_15);
 Delay();
 Delay();
 Delay();
 SendByte(0x24);
  }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。