智能车制作

 找回密码
 注册

扫一扫,访问微社区

STM32论坛
查看: 10803|回复: 9
打印 上一主题 下一主题

STM32F4演示例程之USART收发数据

[复制链接]

489

主题

1691

帖子

1

精华

管理员

网站创始人&站长

Rank: 11Rank: 11Rank: 11Rank: 11

积分
85856

特殊贡献奖章资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
56934
贡献
17352
兑换币
13128
注册时间
2007-6-8
在线时间
5785 小时
跳转到指定楼层
1#
发表于 2012-5-20 23:43:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/*********************************************
    标题:操作USART的练习
    软件平台:IAR for ARM6.21
    硬件平台:stm32f4-discovery
    主频:168M
   
    描述:从其他设备接收数据,再把数据发送出去
    author:小船
    data:2012-02-01
**********************************************/
#include <stm32f4xx.h>
u32 Gb_TimingDelay;
u8 suffer[100];
u8 ok_to_send;
u8 Rx_data_counter;
void Delay(uint32_t nTime);
void main ()
{
  
  char Tx_data_counter;
  
  SCB->AIRCR = 0x05AF0000 | 0x400;  //中断优先级分组 抢占:响应=3:1
  SysTick_Config(SystemCoreClock / 1000); //设置systemtick一毫秒中断
  
  RCC->AHB1ENR |= 0x00000008; //使能GPIOD时钟
  RCC->APB1ENR |= (1<<18);  //使能usart3时钟
  
  USART3->BRR = 0x0000016C;   //波特率115200

  /*
  使能usart3
  usart3发送使能
  usart3接收使能
  接收缓冲区非空中断使能
  8bit
  一位停止位
  无校验
  */
  USART3->CR1 |= (( 1<<13 ) | ( 1<<3 ) | ( 1<<2 ) | ( 1<<5 ));
  
  GPIOD->AFR[1] |= 0x00000077;//选择PD8,9复用功能
  
  GPIOD->MODER &= 0xFFF0FFFF; //设置PD8,9,复用模式
  GPIOD->MODER |= 0x000A0000;
  
//  GPIOD->OTYPER &= 0xFFFFDFFF; //设置PD9推挽输出
  
  GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m
  GPIOD->OSPEEDR |= 0x00020000;
  
  GPIOD->PUPDR &= 0xFFFCFFFF; //PD8
  GPIOD->PUPDR |= 0x00010000;
  
  NVIC->IP[39] = 0xf0; //最低抢占优先级,最低响应优先级1111
  NVIC->ISER[1] |= (1<<(39-32)); //使能中断线39,也就是usart3中断
  
  while(1)
  {  
    if(ok_to_send)  //接收到数据,可以将数据发送
    {
      if((USART3->SR & (1<<7))) //发送数据寄存器空
      {
        USART3->DR = suffer[Tx_data_counter];
        Tx_data_counter++;
        if( suffer[Tx_data_counter] == '\0' )
        {
          Tx_data_counter = 0;
          USART3->CR1 |= 1<<5;  //使能接收中断
          ok_to_send = 0;
        }
      }
    }
  }
}

void Delay(uint32_t nTime)
{
  Gb_TimingDelay = nTime;
  while(Gb_TimingDelay != 0);
}
void SysTick_Handler(void)
{
  if (Gb_TimingDelay != 0x00)
  {
    Gb_TimingDelay--;
  }
}
void USART3_IRQHandler(void)
{
  if(USART3->SR & (1<<5)) //接收数据寄存器非空
  {
    suffer[Rx_data_counter] = USART3->DR;
    Rx_data_counter++;
    if(suffer[Rx_data_counter - 1] == '\0')
    {
      Rx_data_counter = 0;
      USART3->CR1 &= ~(1<<5); //除能接收中断
      ok_to_send = 1;
    }
   }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

31

主题

1010

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4800

热心会员奖章优秀会员奖章活跃会员奖章论坛元老奖章

威望
3250
贡献
986
兑换币
110
注册时间
2012-2-11
在线时间
282 小时
2#
发表于 2012-5-21 12:52:14 | 只看该作者
沙发,嘿嘿顶,正打算学32 的
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
148
威望
114
贡献
34
兑换币
0
注册时间
2012-7-26
在线时间
6 小时
毕业学校
那你
3#
发表于 2012-7-27 10:25:07 | 只看该作者
我在调用这个例程的时候,用串口大师,一直显示不出结果,不知道其他人调用的如何,求指点
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
116
威望
94
贡献
22
兑换币
0
注册时间
2012-8-5
在线时间
0 小时
毕业学校
mmc
4#
发表于 2012-8-5 21:21:51 | 只看该作者
你发送完之后再发一个HEX的0x00就行了,因为检查'\0'作为接收字符串结束的
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
148
威望
114
贡献
34
兑换币
0
注册时间
2012-7-26
在线时间
6 小时
毕业学校
那你
5#
发表于 2012-8-8 09:15:33 | 只看该作者
小船 发表于 2012-8-5 21:21
你发送完之后再发一个HEX的0x00就行了,因为检查'\0'作为接收字符串结束的

我在调试这个程序,可是一直显示的都是00,我在末尾也输入了0了  可还是不行。求指点
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
148
威望
114
贡献
34
兑换币
0
注册时间
2012-7-26
在线时间
6 小时
毕业学校
那你
6#
发表于 2012-8-8 09:16:05 | 只看该作者
小船 发表于 2012-8-5 21:21
你发送完之后再发一个HEX的0x00就行了,因为检查'\0'作为接收字符串结束的

我在调试这个程序,可是一直显示的都是00,我在末尾也输入了0了  可还是不行。求指点
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
35
威望
19
贡献
10
兑换币
10
注册时间
2013-9-6
在线时间
4 小时
毕业学校
中国石油大学
7#
发表于 2013-9-8 22:14:46 | 只看该作者
同求指点啊。小船的这个debuger 是不是 有错误啊
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
35
威望
19
贡献
10
兑换币
10
注册时间
2013-9-6
在线时间
4 小时
毕业学校
中国石油大学
8#
发表于 2013-9-8 22:15:01 | 只看该作者
同求指点啊。小船的这个debuger 是不是 有错误啊
回复 支持 反对

使用道具 举报

0

主题

136

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3714
QQ
威望
1952
贡献
1206
兑换币
1190
注册时间
2013-8-21
在线时间
278 小时
9#
发表于 2013-9-30 08:13:07 | 只看该作者
先看看这个程序,然后在向前辈们请教
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
39
威望
31
贡献
6
兑换币
8
注册时间
2015-1-30
在线时间
1 小时
毕业学校
湖南文理学院
10#
发表于 2015-1-30 10:21:48 | 只看该作者
这个STM32F4discovery板子的串口通信的硬件怎么连接的啊,我电脑上没有COM口的显示,是否还要驱动哦,求指导
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 18:44 , Processed in 0.356261 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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