搜索
bottom↓
回复: 3

求助:关于STM32F107VCT6串口1发送数据的问题

[复制链接]

出0入0汤圆

发表于 2015-5-27 17:41:53 | 显示全部楼层 |阅读模式
如题,今天调试STM32F107VCT6。结果发现串口的数据一只不对。0x00变成0xc0. 0x10变成0xd0。。。。。只有0x55,0xff,才对,不知道是什么问题,折磨疯了。大家有遇到过这个问题么?求大牛指点
下面是我的代码。
  1. #include "stm32f10x.h"

  2. void USART1_GPIO_Init(void);
  3. void USART1_Configuration(void);
  4. void USART1_NVIC_Init(void);
  5. void InitInitComRS232(void);
  6. void InitialSysClock(void);
  7. void SendData1(unsigned char i);
  8. int main(void)
  9. {
  10.         InitialSysClock();//初始化系统时钟
  11.         InitInitComRS232();
  12.        
  13.         while(1)
  14.                 SendData1(0xaa);
  15. }
  16. void BSP_NVIC_Init(void)
  17. {
  18.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);        //先占优先级2位,从优先级2位
  19. #ifdef  VECT_TAB_RAM  
  20.         /* Set the Vector Table base location at 0x20000000 */
  21.         NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  22. #else  /* VECT_TAB_FLASH  */
  23.         /* Set the Vector Table base location at 0x08000000 */
  24.         NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
  25. #endif
  26. }
  27. static volatile ErrorStatus HSEStartUpStatus = SUCCESS;
  28. void InitialSysClock(void)
  29. {
  30.         /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
  31.         /* RCC system reset(for debug purpose) */
  32.         RCC_DeInit();         //设置RCC寄存器重新设置为默认值

  33.         /* Enable HSE */
  34.         RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振

  35.         /* Wait till HSE is ready */
  36.         HSEStartUpStatus = RCC_WaitForHSEStartUp();          //等待外部高速时钟晶振工作

  37.         if (HSEStartUpStatus == SUCCESS)  //外部就绪
  38.         {
  39.                 /* Enable Prefetch Buffer */
  40.                 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  41.                 /* Flash 2 wait state */
  42.                 FLASH_SetLatency(FLASH_Latency_2);

  43.                 /*************************************************************************/
  44.                 /*   HSE=8MHz,HCLK=72MHz,PCLK2=72MHz,PCK1=36MHz                         */
  45.                 /*************************************************************************/

  46.                 /* HCLK = SYSCLK */
  47.                 RCC_HCLKConfig(RCC_SYSCLK_Div1);          //设置AHB时钟不分频

  48.                 /* PCLK2 = HCLK */
  49.                 RCC_PCLK2Config(RCC_HCLK_Div1);         //设置APB2时钟不分频

  50.                 /* PCLK1 = HCLK/2 */
  51.                 RCC_PCLK1Config(RCC_HCLK_Div2);                //设置APB1时钟二分频

  52.                 RCC_ADCCLKConfig(RCC_PCLK2_Div6);        //设置ADC时钟2分频 12Mhz

  53.                 /* PLLCLK = 8MHz * 9 = 72 MHz */
  54.                 RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);

  55.                 /* Enable PLL */
  56.                 RCC_PLLCmd(ENABLE);         //使能PLL


  57.                 /* Wait till PLL is ready */
  58.                 while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
  59.                 }

  60.                 /* Select PLL as system clock source */
  61.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  62.                 /* Wait till PLL is used as system clock source */
  63.                 while (RCC_GetSYSCLKSource() != 0x08) {
  64.                 }
  65.         }
  66.         /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  67.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG
  68.                                                    | RCC_APB2Periph_AFIO, ENABLE);

  69.         BSP_NVIC_Init();
  70.        
  71. }
  72. void InitInitComRS232(void)
  73. {
  74.         USART1_GPIO_Init();                        //初始化端口
  75.         USART1_Configuration();
  76.         USART1_NVIC_Init();       
  77. }

  78. void USART1_Configuration(void)                       //串口初始化函数
  79. {
  80.         USART_InitTypeDef USART_InitStructure;


  81.     //串口参数初始化   
  82.                                                    //串口设置恢复默认参数
  83.     //初始化参数设置
  84.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //打开串口1时钟

  85.         USART_InitStructure.USART_BaudRate = 9600;
  86.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;                           //字长8位
  87.         USART_InitStructure.USART_StopBits = USART_StopBits_1;                                //1位停止字节
  88.         USART_InitStructure.USART_Parity = USART_Parity_No;                                   //无奇偶校验
  89.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;       //无流控制
  90.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                       //打开Rx接收和Tx发送功能
  91.         USART_Init(USART1, &USART_InitStructure);                                             //初始化
  92.        
  93.        
  94.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//TXE接收中断,TC传输完成中断,RXNE接收中
  95.         USART_Cmd(USART1, ENABLE);                                                           //启动串口
  96. }

  97. void USART1_GPIO_Init(void)
  98. {
  99.         GPIO_InitTypeDef GPIO_InitStructure;

  100.         // 使能PortA
  101.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);

  102.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                       //管脚9
  103.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  104.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //复用推挽输出
  105.         GPIO_Init(GPIOA, &GPIO_InitStructure);                             //TX初始化

  106.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                             //管脚10
  107.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  108.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                         //浮空输入
  109.         GPIO_Init(GPIOA, &GPIO_InitStructure);                          //RX初始化
  110. }
  111. void USART1_NVIC_Init(void)
  112. {
  113.         NVIC_InitTypeDef    NVIC_InitStructure;

  114.         NVIC_InitStructure.NVIC_IRQChannel  = USART1_IRQn;
  115.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4;//先占优先级0
  116.         NVIC_InitStructure.NVIC_IRQChannelSubPriority   = 0;   //从优先级
  117.         NVIC_InitStructure.NVIC_IRQChannelCmd   = ENABLE;
  118.         NVIC_Init(&NVIC_InitStructure);
  119. }
  120. void USART1_IRQHandler(void)
  121. {
  122.         u8 RX_dat;                                                        //定义字符变量
  123.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  124.         {
  125.                 /* 清楚接收中断标志*/
  126.                 USART_ClearITPendingBit(USART1, USART_IT_RXNE);
  127.                 RX_dat = USART_ReceiveData(USART1);
  128.                 SendData1(RX_dat);
  129.         }
  130.         if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
  131.         {
  132.                 /* 清楚发送中断标志*/
  133.                 USART_ClearITPendingBit(USART1, USART_IT_TXE);
  134.         }
  135. }

  136. void SendDatas1(unsigned char  *output,unsigned char  Outlength)
  137. {  
  138.   while(Outlength--)
  139.   {  
  140.     USART1->DR=*(output++);
  141.         while((USART1->SR&0X40)==0);//等待发送结束  
  142.   }  
  143. }
  144. void SendData1(unsigned char i)
  145. {
  146.         USART1->DR=i;
  147.         while((USART1->SR&0X40)==0);//等待发送结束        
  148. }

  149. #ifdef  USE_FULL_ASSERT

  150. /**
  151.   * @brief  Reports the name of the source file and the source line number
  152.   *         where the assert_param error has occurred.
  153.   * @param  file: pointer to the source file name
  154.   * @param  line: assert_param error line source number
  155.   * @retval None
  156.   */
  157. void assert_failed(uint8_t* file, uint32_t line)
  158. {
  159.   /* User can add his own implementation to report the file name and line number,
  160.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  161.   /* Infinite loop */
  162.   while (1)
  163.   {
  164.   }
  165. }

  166. #endif
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2015-5-27 17:53:45 | 显示全部楼层
额,大牛们都去哪里了?

出0入0汤圆

 楼主| 发表于 2015-5-28 08:32:10 | 显示全部楼层
额,大家都没有遇到过这种问题么?

出0入0汤圆

 楼主| 发表于 2015-5-28 11:09:52 | 显示全部楼层
问题以解决。结贴
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 04:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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