OpenEdv-开源电子网

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

STM32大容量产品UART4实例(与mini板串口实验功能一摸一样,不过用的是UART4而不是USART1!)

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-4-10 13:08:13 | 显示全部楼层 |阅读模式

 没什么太多变化,STM32的串口1~3在MDK里面定义为USART1~3.而4和5定义为UART4,5.

除了这点改变,其他的没啥变的,直接修改即可。另外注意,串口2~5使用的是pclk1,为36M,而不是串口1的72M。

串口设置部分源码:

//初始化IO 串口4
//pclk2CLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_init(u32 pclk2,u32 bound)
{   
 float temp;
 u16 mantissa;
 u16 fraction;   
 temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
 mantissa=temp;     //得到整数部分
 fraction=(temp-mantissa)*16; //得到小数部分 
    mantissa<<=4;
 mantissa+=fraction;
 RCC->APB2ENR|=1<<4;   //使能PORTC口时钟 
 RCC->APB1ENR|=1<<19;  //使能串口4时钟
 GPIOC->CRH&=0XFFFF00FF;
 GPIOC->CRH|=0X00008B00;//IO状态设置  

 RCC->APB1RSTR|=1<<19;   //复位串口4
 RCC->APB1RSTR&=~(1<<19);//停止复位       
 //波特率设置
  UART4->BRR=mantissa; // 波特率设置 
 UART4->CR1|=0X200C;  //1位停止,无校验位.
#ifdef EN_UART4_RX    //如果使能了接收
 //使能接收中断
 UART4->CR1|=1<<8;    //PE中断使能
 UART4->CR1|=1<<5;    //接收缓冲区非空中断使能      
 MY_NVIC_Init(3,3,UART4_IRQChannel,2);//组2,最低优先级
#endif
}
主函数:
int main(void)
{   
 u8 t;
 u8 len; 
 u16 times=0; 
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(36,9600);  //串口初始化为9600
 LED_Init();      //初始化与LED连接的硬件接口   
 while(1)
 {
  if(USART_RX_STA&0x80)
  {       
   len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
   printf("\n您发送的消息为:\n");
   for(t=0;t<len;t++)
   {
    UART4->DR=USART_RX_BUF[t];
    while((UART4->SR&0X40)==0);//等待发送结束
   }
   printf("\n\n");//插入换行
   USART_RX_STA=0;
  }else
  {
   times++;
   if(times%5000==0)
   {
    printf("\nMiniSTM32开发板 串口实验\n");
    printf("正点原子@ALIENTEK\n\n\n");
   }
   if(times%200==0)printf("请输入数据,以回车键结束\n"); 
   if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
   delay_ms(10);  
  }
 } 
}

最后附上工程

实验3 串口实验(串口4).rar

26.52 KB, 下载次数: 3733

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2011-1-12
在线时间
0 小时
发表于 2011-4-12 13:11:56 | 显示全部楼层
Thanks。这个串口4、5还是折腾了不少人的,原子的开源精神值得学习!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2011-4-12 13:33:26 | 显示全部楼层
呵呵,好久没见你活跃了,最近忙啥去了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2011-1-12
在线时间
0 小时
发表于 2011-4-12 19:49:02 | 显示全部楼层
毕业论文。。。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2011-4-12 21:06:41 | 显示全部楼层
回复【4楼】 PowerEDV :
-------------------------------
毕业设计做什么东西啊?
到时候开源到我们论坛吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2011-1-12
在线时间
0 小时
发表于 2011-4-12 22:49:17 | 显示全部楼层
车载终端啊,智能交通方面的,只是编了些测试范例,板子照片在论坛上发过哦~
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2011-4-6
在线时间
0 小时
发表于 2011-4-14 14:35:10 | 显示全部楼层
太好了,太谢谢你啦!我应该把你供起来!
回复 支持 反对

使用道具 举报

12

主题

216

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2011-4-7
在线时间
3 小时
发表于 2012-3-18 20:55:46 | 显示全部楼层
收下!!
回复 支持 反对

使用道具 举报

头像被屏蔽

275

主题

327

帖子

0

精华

禁止访问

积分
1065
金钱
1065
注册时间
2011-7-7
在线时间
34 小时
发表于 2012-9-24 16:37:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

64

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-7-23
在线时间
13 小时
发表于 2012-12-12 09:10:28 | 显示全部楼层
回复【9楼】cjq_enjoy:
---------------------------------
带库的在哪?我需要带库的!!
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-12-6
在线时间
0 小时
发表于 2013-12-29 13:52:42 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
没有报错啊!!可是就是用不了 为什么~~%>_<%
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2013-12-29 20:46:13 | 显示全部楼层
回复【11楼】sssunny:
---------------------------------
什么意思?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-2
在线时间
0 小时
发表于 2014-1-2 11:05:03 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
在开发板上可用,但在stm32f103r8上总过不了下面这句
 for(t=0;t<len;t++)
    {
     UART4->DR=USART_RX_BUF[t];
     while((UART4->SR&0X40)==0);//等待发送结束////程序死在这个语句上
    }
不知道为什么,请解答
jbwjyg
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2014-1-2 14:23:02 | 显示全部楼层
回复【13楼】jbwjyg:
---------------------------------
R8没有串口4.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-2
在线时间
0 小时
发表于 2014-1-3 16:43:03 | 显示全部楼层
看错了,谢谢原子
jbwjyg
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-11-7
在线时间
0 小时
发表于 2014-7-4 10:17:58 | 显示全部楼层
为什么我用这段代码测试的时候全部都是发送 00 00,还请帮忙看下
回复 支持 反对

使用道具 举报

4

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-7-29
在线时间
0 小时
发表于 2014-11-12 23:42:54 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,uart4有没有库函数版本的呢,怎么我用库函数版本移植寄存器版本会报错呢,原子哥急用啊T_T
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2014-11-13 23:19:18 | 显示全部楼层
回复【17楼】913481587@qq.com:
---------------------------------
没。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-8-22
在线时间
22 小时
发表于 2014-12-4 14:58:24 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
老大,uart4的dma怎么配置,我按照usart2配置的,用一个杜邦线连接PC10 C11但是没有反应,用的战舰的班子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2014-12-4 18:39:01 | 显示全部楼层
回复【19楼】shangwudong:
---------------------------------
这就得你自己参考着去设置了.
现成例子没有。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2013-12-6
在线时间
0 小时
发表于 2015-3-12 13:12:38 | 显示全部楼层
原子哥我用战舰串口4,接蓝牙模块。程序烧录进去,蓝牙模块只能向手机蓝牙助手发送数据,而不能接收来自手机蓝牙助手的数据。程序中,我想只要蓝牙模块收到手机发来的数据就让LED1=!LED1;亮一下。现在问题是貌似根本进不了 if(USART_RX_STA&0x80),只能在else里面执行代码。求助!
int main(void)
{
u8 t;
u8 len;
u16 times=0;  
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化 
uart_init(36,9600);  //串口初始化为9600
LED_Init();     //初始化与LED连接的硬件接口    
while(1)
{
if(USART_RX_STA&0x80)
{    
len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
printf("\nYou input date is:\n");
for(t=0;t<len;t++)
{
UART4->DR=USART_RX_BUF[t];
while((UART4->SR&0X40)==0);//等待发送结束
}
printf("\n\n");//插入换行
USART_RX_STA=0;
LED1=!LED1;
}else
{
times++;
if(times%200==0)printf("please input date\n");  
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);   
}
}  
}
我的淘宝小店http://shop67419055.taobao.com
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2015-3-12 23:04:27 | 显示全部楼层
检查串口4的接收中断,是否正常.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-10-16 10:58:30 | 显示全部楼层
回复【14楼】正点原子:
------------------------
原子哥,f103RB有没有串口4啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2015-10-18 22:01:49 | 显示全部楼层
回复【23楼】zhoutao450826:
---------------------------------
没有的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-10-19 19:43:05 | 显示全部楼层
回复【24楼】正点原子:
---------------------------------
好的,谢谢。
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 13:51:52 | 显示全部楼层
我想用串口1接收ZigBee发过来的数据。用串口4发送一些数据到串口调试函数。我下载了这个程序。加上串口1 的就发送乱码了
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 14:32:32 | 显示全部楼层
现在想调这个功能“串口调试助手发送数据给stm32的串口1,stm32的串口4在不断打印数据到另一个串口调试助手
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

37

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
485
金钱
485
注册时间
2015-5-5
在线时间
34 小时
发表于 2015-10-20 14:34:01 | 显示全部楼层
但是复位运行后,开始的时候stm32发送数据通过串口4能显示在串口调试助手上,我一按另一个串口调试助手的发送,就死机了
弹起华丽的乐章 撕下最后的伪装
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-3-19
在线时间
1 小时
发表于 2016-3-19 19:03:41 | 显示全部楼层
在哪儿可以看到串口4和串口5的IO引脚映射呢  PC10 PC11 手册上查不到是UART4呢
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-3-19
在线时间
1 小时
发表于 2016-3-19 21:04:05 | 显示全部楼层
MYS 发表于 2016-3-19 19:03
在哪儿可以看到串口4和串口5的IO引脚映射呢  PC10 PC11 手册上查不到是UART4呢

U S A R T
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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