OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10638|回复: 16

串口发送程序调试 各位大大帮忙

[复制链接]

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
发表于 2012-7-28 15:23:42 | 显示全部楼层 |阅读模式

这是串口发送程序

void USART_Send( u8 portNum, u8 res)
{
   if ( portNum == 1 )
   {
   USART1->DR= res;
   while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
 //  USART1->SR &= ~(1 << 6); 
   }
   else if ( portNum == 2 )
   {
   USART2->DR= res;
   while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
 //  USART2->SR &= ~(1 << 6);
   }
   else if ( portNum == 3 )
   {
   USART3->DR= res;
   while((USART3->SR&0X40)==0);//循环发送,直到发送完毕
   
//   USART3->SR &= 0 << 6;
   }
}
这是初始化
void uart3_init(u32 pclk1,u32 bound)
{   
 float temp;
 u16 mantissa;
 u16 fraction;   
 temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
 mantissa=temp;     //得到整数部分
 fraction=(temp-mantissa)*16; //得到小数部分 
  mantissa<<=4;
 mantissa+=fraction;

  
 RCC->APB2ENR|=1<<4;   //使能PORTC时钟
 RCC->APB1ENR|=1<<18;  //使能串口3时钟
// RCC->APB2ENR|=1<<0;  //辅助功能IO时钟开启。

   
 RCC->APB1RSTR|=1<<18;   //复位串口3
 RCC->APB1RSTR&=~(1<<18);//停止复位

 USART3->BRR=mantissa; // 波特率设置
//UE=1:USART模块允许;M=0:1个起始位,8个数据位,n个停止位;TE=1:发送允许;RE=1:接收允许  
 USART3->CR1|=0X200C; 

 #ifdef EN_USART2_RX    //如果使能了接收
  //使能接收中断
  USART3->CR1|=1<<8;    //PE中断使能
  USART3->CR1|=1<<5;    //接收缓冲区非空中断使能      
  MY_NVIC_Init(3,3,USART3_IRQChannel,2);//组2,最低优先级
 #endif
}
这是串口时钟配置uart3_init(36,115200);  //串口3初始化为115200
这是GPIO口配置
void GPIOC_Init(void)
{
 GPIOC->CRH&=0XFFFF00FF;
 GPIOC->CRH|=0X00004B00;//IO状态设置//将发送端的管脚(PC10)配置为复用推挽输出,将接收端的管脚(PC11)配置为浮空输入 
}
最后是发送程序USART_Send(3,0x01);    

串口调试助手没收到任何东西

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-28 15:59:41 | 显示全部楼层
软件仿真看看USART3的设置是否正常.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
 楼主| 发表于 2012-7-28 16:43:29 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
是正常的 就是波特率是115384  这个应该没关系吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-28 18:52:24 | 显示全部楼层
这个可能导致你通信不正常,你电脑端的波特率是多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
 楼主| 发表于 2012-7-28 19:11:14 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
115200
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2012-7-28 20:10:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-28 20:17:31 | 显示全部楼层
回复【5楼】wanghy0119:
---------------------------------
波特率不匹配,可能收不到数据的!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
 楼主| 发表于 2012-7-29 06:40:46 | 显示全部楼层
回复【6楼】qq371833846:
while((USART1->SR&0X40)==0)要写在USART1->DR= res;的前面。
---------------------------------
这样也试过 还是没什么用
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
 楼主| 发表于 2012-7-29 06:42:59 | 显示全部楼层
回复【7楼】正点原子:
回复【5楼】wanghy0119: --------------------------------- 波特率不匹配,可能收不到数据的!
---------------------------------
照理说这样小的误差应该没什么大问题吧
还有,是不是发送的数据不对,不应该是十六进制的?又或者说要开启端口的第二功能复用呢?不过我都试过 好像也都没什么效果 是不是程序哪里还有不对的地方
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-29 09:55:53 | 显示全部楼层
回复【9楼】wanghy0119:
---------------------------------
有问题的.不过我不确定你的这个误差是否导致不能收到数据.
但事实是你现在没法正常通信.所以建议你还是一步步来,先通信搞好了,再来测试是不是这个误差能接受 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-29 09:56:32 | 显示全部楼层
回复【9楼】wanghy0119:
---------------------------------
发送数据都无所谓.16进制,ascii都可以.只要收发一致即可.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
 楼主| 发表于 2012-7-29 10:25:57 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
谢谢原子哥 
那我的程序应该没问题吧 配置啊什么的这些东西,这样我就可以改硬件电路了
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2012-7-28
在线时间
6 小时
 楼主| 发表于 2012-7-29 10:30:39 | 显示全部楼层
// RCC->APB2ENR|=1<<0;  //辅助功能IO时钟开启。

要不要开启这个辅助功能时钟的
回复 支持 反对

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2233
金钱
2233
注册时间
2012-4-30
在线时间
7 小时
发表于 2012-7-29 12:13:44 | 显示全部楼层
回复【13楼】wanghy0119:
---------------------------------
不用开启辅助时钟吧、、
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2012-7-29
在线时间
0 小时
发表于 2012-7-29 21:14:41 | 显示全部楼层
我觉得你收的时候可能显示方式弄错了,要十六进制显示,不然你就发送个0x31,看看有没有
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2012-7-22
在线时间
0 小时
发表于 2012-7-30 01:12:02 | 显示全部楼层
串口3 不是应该使能PORTB时钟吗? 

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-7-30 09:03:00 | 显示全部楼层
回复【16楼】喵喵小星人:
---------------------------------
对啊....
串口3在PORTB上....
15楼正中要害.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 02:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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