OpenEdv-开源电子网

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

stm32,串口2无法正常收发数据。中断方式。原子哥请帮我看看:附工程。谢谢。

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-3-4
在线时间
0 小时
发表于 2013-3-4 17:26:47 | 显示全部楼层 |阅读模式
 stm32,串口2无法正常收发数据。中断方式。原子哥请帮我看看:附工程。谢谢。main函数上面比较乱。。麻烦了。

USART1-2.zip

5.25 MB, 下载次数: 142

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-4 22:58:43 | 显示全部楼层
MDK4.7编译不过,提示什么main.d有问题.
给你一个我们战舰板的串口2例程参考.

实验24 485实验.rar

124.6 KB, 下载次数: 355

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-3-4
在线时间
0 小时
 楼主| 发表于 2013-3-5 09:17:28 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
这么奇怪?我的是4.5的啊。。应该差不了多少吧。谢谢啊,我看看
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-3-4
在线时间
0 小时
 楼主| 发表于 2013-3-5 10:42:38 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------
你的文件齐吗?我也编译不了你的文件。
..\SYSTEM\sys\sys.h(3): error:  #5: cannot open source input file "stm32f10x_map.h": No such file or directory

刚看了下,好像usart2要重映射
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-5 10:56:54 | 显示全部楼层
我的例程是mdk3.80a的.
如果4.X要编译,看这个帖子:http://www.openedv.com/posts/list/10955.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-3-4
在线时间
0 小时
 楼主| 发表于 2013-3-5 11:33:21 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
谢谢原子哥,串口问题也解决了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-5 12:04:25 | 显示全部楼层
回复【6楼】top_dada:
---------------------------------
解决了,最好把问题点及对策描述一下,方便别人.呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-3-4
在线时间
0 小时
 楼主| 发表于 2013-3-5 13:00:55 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
嗯 ,记录在这里了。。
http://blog.csdn.net/top_dada/article/details/8636876
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-5 16:21:39 | 显示全部楼层
回复【8楼】top_dada:
---------------------------------
最恶心的就是scdn了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-3-4
在线时间
0 小时
 楼主| 发表于 2013-3-6 09:59:33 | 显示全部楼层
原来原子哥痛恨CSDN的啊,那我就发到这里来了。。呵呵!!!



STM32上有很多I/O口,也有很多的内置外设想I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。知道了这些我们就不难理解上面代码的意思了,程序中用到的USART2外设的TX,RX分别对应PA2,PA3,但是我的学习板上的PA2,PA3引脚接了其他设备,但是为了还要用USART2,
“RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO”就打开了GPIOD重映射功能把USART2设备的TX,RX映射到PD5,PD6上,我们在这两个引脚上接上MAX232串口芯片就可以使用USART2串口通信了。那为看官该问:“USART2是不是可以映射到任意管脚呢?”答案是否定的,它只能映射到固定的管脚,下图是USART2重映射表  

 


串口引脚图: 






//以下是部分代码修改上面的工程就可以了。。
//USART2管脚配置
   /* Configure USART2 Rx (PA3) as input floating                             */
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//使能GPIO端口映射USART2
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  /* Configure USART2 Tx (PA2) as alternate function push-pull                */
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


映射:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);
中断收发数据:
void USART2_IRQHandler(void)
{
u8 c;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
//   RxBuffer[RxCounter++]=USART1->DR;
flag = flag ^ 1;
if(flag)//灯亮灭
GPIO_SetBits(GPIOD, GPIO_Pin_3);
else
    GPIO_ResetBits(GPIOD, GPIO_Pin_3);
c=USART2->DR;    
UART2_SendByte(c);  
}



回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-23 04:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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