[STM32F1] stm32 串口数据发送错误

[复制链接]
7472|28
 楼主| zoyee.l 发表于 2014-3-8 22:18 | 显示全部楼层 |阅读模式
初学串口,串口发送有数据,但数据错误,按照例程编的,就是不知道哪里有问题,贴出来请教各位老师。


  1. #include "stm32f10x.h"
  2. void Delay(unsigned int x);

  3. void UART_Init(void);
  4. void UART2_PutChar(unsigned char ch);

  5. int main(void)
  6. {
  7.    SystemInit();
  8.    UART_Init();
  9.    while(1)
  10.    {
  11. Delay(6550);
  12.      UART2_PutChar(0x26);
  13. }


  14. void UART_Init(void)
  15. {
  16.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC,ENABLE);
  17.    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
  18.    GPIO_InitTypeDef GPIO_InitStructure;
  19.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                  
  20.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  21.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22.    GPIO_Init(GPIOA, &GPIO_InitStructure);
  23.    
  24.    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                                  
  25.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  26.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  27.    GPIO_Init(GPIOA, &GPIO_InitStructure);
  28.    
  29.     USART_InitTypeDef USART_InitStructure;//定义串口结构体
  30.     USART_InitStructure.USART_BaudRate=9600;
  31.     USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  32.     USART_InitStructure.USART_StopBits=USART_StopBits_1;
  33.     USART_InitStructure.USART_Parity=USART_Parity_No;
  34.     USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  35.     USART_InitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
  36.     USART_Init(USART2,&USART_InitStructure);
  37.     USART_Cmd(USART2,ENABLE);
  38. }

  39. void UART2_PutChar(unsigned char ch)
  40. {
  41.    USART_SendData(USART2,ch);
  42.    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);
  43. }


  44. void Delay(unsigned int x)
  45. {
  46. unsigned int t;
  47. t=x;
  48. while(t--);
  49. }



zchong 发表于 2014-3-9 11:34 | 显示全部楼层
什么错误?
dirtwillfly 发表于 2014-3-9 22:00 | 显示全部楼层
建议楼主描述下是怎么调试串口的
dawei360 发表于 2014-3-9 22:54 | 显示全部楼层
告诉你,你的串口需要映射到指定的端口上,才能行
一清如水 发表于 2014-3-9 23:08 | 显示全部楼层
感觉按照官方库,还是可以找出来问题的,实在不行,调试,看对应寄存器位有没有置位就可以发现问题所在了
 楼主| zoyee.l 发表于 2014-3-10 09:09 | 显示全部楼层
zchong 发表于 2014-3-9 11:34
什么错误?

发送0x26,结果接收到的是60,端口设置于波特率设置都没有问题。
 楼主| zoyee.l 发表于 2014-3-10 09:10 | 显示全部楼层
dirtwillfly 发表于 2014-3-9 22:00
建议楼主描述下是怎么调试串口的

将程序下入stm32,然后打开串口调试助手,设置好端口和波特率,打开串口,运行程序,发送0x26,结果接收到的是60,端口设置于波特率设置都没有问题。
 楼主| zoyee.l 发表于 2014-3-10 09:11 | 显示全部楼层
dawei360 发表于 2014-3-9 22:54
告诉你,你的串口需要映射到指定的端口上,才能行

端口没有错误
Ketose 发表于 2014-3-10 09:38 | 显示全部楼层
初始化完了,用USART_ClearFlag清一下发送标志。
dawei360 发表于 2014-3-10 22:24 | 显示全部楼层
zoyee.l 发表于 2014-3-10 09:11
端口没有错误

你有没有看,串口1在多个IO上都有,相当于串口总线
dawei360 发表于 2014-3-10 22:25 | 显示全部楼层
Ketose 发表于 2014-3-10 09:38
初始化完了,用USART_ClearFlag清一下发送标志。

这个只是发送,不是接受,不用
dawei360 发表于 2014-3-10 22:26 | 显示全部楼层
zoyee.l 发表于 2014-3-10 09:11
端口没有错误

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

M4中串口和GPIO的时钟不都是在APB 总线上的,分开了,一个APB,一个是AHB,I你看看库中的源码就知道了
yong_ning100 发表于 2014-3-11 14:03 | 显示全部楼层
参考12楼,如果是M3的没错,在APB1上,M4的你得详细去看下端口
 楼主| zoyee.l 发表于 2014-3-11 16:59 | 显示全部楼层
dawei360 发表于 2014-3-10 22:26
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC,ENABLE);
...

用的是M3,时钟不就是在APB总线上吗?
 楼主| zoyee.l 发表于 2014-3-11 19:59 | 显示全部楼层
dawei360 发表于 2014-3-10 22:26
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC,ENABLE);
...

开发板上的RX,TX连接是这样的,用的是stm32F103VET6的片子。
43434.jpg
momingwei 发表于 2014-3-12 16:00 | 显示全部楼层
void UART2_PutChar(unsigned char ch) 把char换成u8试试
 楼主| zoyee.l 发表于 2014-3-12 20:02 | 显示全部楼层
momingwei 发表于 2014-3-12 16:00
void UART2_PutChar(unsigned char ch) 把char换成u8试试

试了,不行
 楼主| zoyee.l 发表于 2014-3-12 20:03 | 显示全部楼层
momingwei 发表于 2014-3-12 16:00
void UART2_PutChar(unsigned char ch) 把char换成u8试试

试了,不行
 楼主| zoyee.l 发表于 2014-3-12 20:03 | 显示全部楼层
momingwei 发表于 2014-3-12 16:00
void UART2_PutChar(unsigned char ch) 把char换成u8试试

试了,不行
dawei360 发表于 2014-3-12 22:11 | 显示全部楼层
zoyee.l 发表于 2014-3-11 19:59
开发板上的RX,TX连接是这样的,用的是stm32F103VET6的片子。

M3的好说啊,直接设置PA2\PA3 ,串口、GPIO 口时钟初始化、串口使能,单独供电、串口打印即可,我写的是M4的操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

205

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部