打印
[STM32F1]

stm32 串口数据发送错误

[复制链接]
6776|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
初学串口,串口发送有数据,但数据错误,按照例程编的,就是不知道哪里有问题,贴出来请教各位老师。


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

void UART_Init(void);
void UART2_PutChar(unsigned char ch);

int main(void)
{
   SystemInit();
   UART_Init();
   while(1)
   {
Delay(6550);
     UART2_PutChar(0x26);
}


void UART_Init(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC,ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
   GPIO_InitTypeDef GPIO_InitStructure;
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                  
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                                  
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    USART_InitTypeDef USART_InitStructure;//定义串口结构体
    USART_InitStructure.USART_BaudRate=9600;
    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);
}

void UART2_PutChar(unsigned char ch)
{
   USART_SendData(USART2,ch);
   while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);
}


void Delay(unsigned int x)
{
unsigned int t;
t=x;
while(t--);
}



沙发
zchong| | 2014-3-9 11:34 | 只看该作者
什么错误?

使用特权

评论回复
板凳
dirtwillfly| | 2014-3-9 22:00 | 只看该作者
建议楼主描述下是怎么调试串口的

使用特权

评论回复
地板
dawei360| | 2014-3-9 22:54 | 只看该作者
告诉你,你的串口需要映射到指定的端口上,才能行

使用特权

评论回复
5
一清如水| | 2014-3-9 23:08 | 只看该作者
感觉按照官方库,还是可以找出来问题的,实在不行,调试,看对应寄存器位有没有置位就可以发现问题所在了

使用特权

评论回复
6
zoyee.l|  楼主 | 2014-3-10 09:09 | 只看该作者
zchong 发表于 2014-3-9 11:34
什么错误?

发送0x26,结果接收到的是60,端口设置于波特率设置都没有问题。

使用特权

评论回复
7
zoyee.l|  楼主 | 2014-3-10 09:10 | 只看该作者
dirtwillfly 发表于 2014-3-9 22:00
建议楼主描述下是怎么调试串口的

将程序下入stm32,然后打开串口调试助手,设置好端口和波特率,打开串口,运行程序,发送0x26,结果接收到的是60,端口设置于波特率设置都没有问题。

使用特权

评论回复
8
zoyee.l|  楼主 | 2014-3-10 09:11 | 只看该作者
dawei360 发表于 2014-3-9 22:54
告诉你,你的串口需要映射到指定的端口上,才能行

端口没有错误

使用特权

评论回复
9
Ketose| | 2014-3-10 09:38 | 只看该作者
初始化完了,用USART_ClearFlag清一下发送标志。

使用特权

评论回复
10
dawei360| | 2014-3-10 22:24 | 只看该作者
zoyee.l 发表于 2014-3-10 09:11
端口没有错误

你有没有看,串口1在多个IO上都有,相当于串口总线

使用特权

评论回复
11
dawei360| | 2014-3-10 22:25 | 只看该作者
Ketose 发表于 2014-3-10 09:38
初始化完了,用USART_ClearFlag清一下发送标志。

这个只是发送,不是接受,不用

使用特权

评论回复
12
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你看看库中的源码就知道了

使用特权

评论回复
13
yong_ning100| | 2014-3-11 14:03 | 只看该作者
参考12楼,如果是M3的没错,在APB1上,M4的你得详细去看下端口

使用特权

评论回复
14
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总线上吗?

使用特权

评论回复
15
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的片子。

使用特权

评论回复
16
momingwei| | 2014-3-12 16:00 | 只看该作者
void UART2_PutChar(unsigned char ch) 把char换成u8试试

使用特权

评论回复
17
zoyee.l|  楼主 | 2014-3-12 20:02 | 只看该作者
momingwei 发表于 2014-3-12 16:00
void UART2_PutChar(unsigned char ch) 把char换成u8试试

试了,不行

使用特权

评论回复
18
zoyee.l|  楼主 | 2014-3-12 20:03 | 只看该作者
momingwei 发表于 2014-3-12 16:00
void UART2_PutChar(unsigned char ch) 把char换成u8试试

试了,不行

使用特权

评论回复
19
zoyee.l|  楼主 | 2014-3-12 20:03 | 只看该作者
momingwei 发表于 2014-3-12 16:00
void UART2_PutChar(unsigned char ch) 把char换成u8试试

试了,不行

使用特权

评论回复
20
dawei360| | 2014-3-12 22:11 | 只看该作者
zoyee.l 发表于 2014-3-11 19:59
开发板上的RX,TX连接是这样的,用的是stm32F103VET6的片子。

M3的好说啊,直接设置PA2\PA3 ,串口、GPIO 口时钟初始化、串口使能,单独供电、串口打印即可,我写的是M4的操作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

205

帖子

2

粉丝