OpenEdv-开源电子网

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

stm32串口实验

[复制链接]

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
发表于 2016-11-22 16:08:45 | 显示全部楼层 |阅读模式
1金钱
请问在作串口实验室时,用到了中断,出现了下面的串口中断寄存器宏定义,但是我不理解这些宏定义值的具体意思是什么,在哪里可以找到这些中断参数设置。

串口中断

串口中断

最佳答案

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

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-11-22 16:08:46 | 显示全部楼层
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-11-22 16:45:08 | 显示全部楼层
看手册查寄存器  对着库函数里边的操作,就知道什么意思了
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-22 17:27:15 | 显示全部楼层
止天 发表于 2016-11-22 16:45
看手册查寄存器  对着库函数里边的操作,就知道什么意思了

中文手册里面好像没有这样寄存器的讲解。图片就是在库函数指南找的。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-11-22 18:11:16 | 显示全部楼层
ouxili 发表于 2016-11-22 17:27
中文手册里面好像没有这样寄存器的讲解。图片就是在库函数指南找的。

有种东西叫参考手册
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-11-23 07:54:45 | 显示全部楼层
还有库函数操作手册  自己搜吧

STM32F103中文教程及参考手册.pdf

3.69 MB, 下载次数: 88

回复

使用道具 举报

2

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-9-12
在线时间
3 小时
发表于 2016-11-23 08:57:36 | 显示全部楼层
其实最简单的方法就是百度咯,但是我觉得没用到之前不需要了解那么多吧,用到的时候就知道了
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-23 09:43:19 | 显示全部楼层
止天 发表于 2016-11-23 07:54
还有库函数操作手册  自己搜吧

谢谢你,这个我有的。
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-23 09:44:00 | 显示全部楼层
千帝V龙魂 发表于 2016-11-23 08:57
其实最简单的方法就是百度咯,但是我觉得没用到之前不需要了解那么多吧,用到的时候就知道了

好吧
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-23 09:44:33 | 显示全部楼层

我有,但是在里面我没有找到
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-24 08:56:16 | 显示全部楼层
止天 发表于 2016-11-22 16:45
看手册查寄存器  对着库函数里边的操作,就知道什么意思了

能否举个例子?比如第一个USART_IT_PE    对应的0x0028怎么解释?
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-11-24 11:13:46 | 显示全部楼层
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
{
  uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;
  uint32_t usartxbase = 0x00;
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CONFIG_IT(USART_IT));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  /* The CTS interrupt is not available for UART4 and UART5 */
  if (USART_IT == USART_IT_CTS)
  {
    assert_param(IS_USART_1236_PERIPH(USARTx));
  }
   
  usartxbase = (uint32_t)USARTx;

  /* Get the USART register index */
  usartreg = (((uint8_t)USART_IT) >> 0x05);

  /* Get the interrupt position */
  itpos = USART_IT & IT_MASK;
  itmask = (((uint32_t)0x01) << itpos);
   
  if (usartreg == 0x01) /* The IT is in CR1 register */
  {
    usartxbase += 0x0C;
  }
  else if (usartreg == 0x02) /* The IT is in CR2 register */
  {
    usartxbase += 0x10;
  }
  else /* The IT is in CR3 register */
  {
    usartxbase += 0x14;
  }
  if (NewState != DISABLE)
  {
    *(__IO uint32_t*)usartxbase  |= itmask;
  }
  else
  {
    *(__IO uint32_t*)usartxbase &= ~itmask;
  }
}
USART_IT_PE    对应的0x0028带入
  usartreg = 1
  /* Get the interrupt position */
  itpos =8
  itmask =0x100;
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-24 15:34:46 | 显示全部楼层
谢谢您的解释,遇到有效性判断,我就头大,这段代码我得仔细研究一段时间了。
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-11-24 16:38:23 | 显示全部楼层
根据您上面给的代码我推导了一遍,用得是USART1里面的USART_IT_PE,推导的结果是:usartxreg=1;itpos=0x0008;itmask=0x0100;usartsbase=0x4001390C;推到这一步我不知道对应的是USART1的哪个寄存器了,因为根据寄存器表依然是USART1里面的,因为它有1k字节的容量,但是USART1寄存器映射表最大只是对应到了USART_GTPR,这个地址是0x40013818与usartsbase的地址有一段距离,手册上查不出0x4001390C对应的是什么寄存器地址。
回复

使用道具 举报

5

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2016-11-7
在线时间
63 小时
发表于 2016-11-30 22:01:58 | 显示全部楼层
{
                        times++;
                        if(times%5000==0)
                        {
                                printf("\r\n战舰STM32开发板 串口实验\r\n");
                                printf("正点原子@ALIENTEK\r\n\r\n");
                        }
                        if(times%200==0)printf("请输入数据,以回车键结束\n");  
                        if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
                        delay_ms(10);   
                }
回复

使用道具 举报

5

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2016-11-7
在线时间
63 小时
发表于 2016-11-30 22:02:23 | 显示全部楼层
lihilong 发表于 2016-11-30 22:01
{
                        times++;
                        if(times%5000==0)

有没有人能详解一下 前边都能看懂 这边看不顺了
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2016-12-1 00:06:50 | 显示全部楼层
ouxili 发表于 2016-11-24 08:56
能否举个例子?比如第一个USART_IT_PE    对应的0x0028怎么解释?

后面的是寄存器的地址,以后想操作这个寄存器不用把地址写出来,直接对前面的名字操作即可
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2016-12-1 00:23:16 | 显示全部楼层
梦在远方 发表于 2016-12-1 00:06
后面的是寄存器的地址,以后想操作这个寄存器不用把地址写出来,直接对前面的名字操作即可

就是让开发板的液晶显示屏每隔一定的时间间隔输出一个字符串的,time++实际上起了一个计时的功能,它计满某些整数的倍数时就输出一些字符
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2016-12-1 00:23:17 | 显示全部楼层
梦在远方 发表于 2016-12-1 00:06
后面的是寄存器的地址,以后想操作这个寄存器不用把地址写出来,直接对前面的名字操作即可

就是让开发板的液晶显示屏每隔一定的时间间隔输出一个字符串的,time++实际上起了一个计时的功能,它计满某些整数的倍数时就输出一些字符
回复

使用道具 举报

6

主题

22

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-12-1
在线时间
7 小时
发表于 2016-12-1 00:23:17 | 显示全部楼层
梦在远方 发表于 2016-12-1 00:06
后面的是寄存器的地址,以后想操作这个寄存器不用把地址写出来,直接对前面的名字操作即可

就是让开发板的液晶显示屏每隔一定的时间间隔输出一个字符串的,time++实际上起了一个计时的功能,它计满某些整数的倍数时就输出一些字符
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-12-1 17:38:05 | 显示全部楼层
lihilong 发表于 2016-11-30 22:02
有没有人能详解一下 前边都能看懂 这边看不顺了

定义了一个times变量,每计数5000下产生一次输出,后面花括号里的两个语句是要输出的内容
回复

使用道具 举报

42

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-3-8
在线时间
57 小时
 楼主| 发表于 2016-12-1 17:40:14 | 显示全部楼层
lihilong 发表于 2016-11-30 22:02
有没有人能详解一下 前边都能看懂 这边看不顺了

这段内容其实语句弄反了应该先是每30下流水灯反转一次,每200下输出:请输入数据,以回车键结束,每5000下输出那两条语句
回复

使用道具 举报

5

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2016-11-7
在线时间
63 小时
发表于 2016-12-5 20:01:54 | 显示全部楼层
ouxili 发表于 2016-12-1 17:38
定义了一个times变量,每计数5000下产生一次输出,后面花括号里的两个语句是要输出的内容

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 00:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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