OpenEdv-开源电子网

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

关于正点原子 sim900a 库函数版本 MiniSTM2开发板的 程序问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-12-27
在线时间
0 小时
发表于 2014-12-28 12:23:03 | 显示全部楼层 |阅读模式
5金钱
首先感谢 原子 能在百忙之中看到此帖!
    昨天 看了您的 sim900a 的代码,有如下疑惑:
    1)代码是 寄存器和库函数混编,对于我纯软件出身的人看着实在是费点劲,忘您有时间能出一个纯库函数的版本!

    2)发现向sim900a发送数据时,采用了 USART2 DMA 方式;可接收却采用了 USART2普通中断方式,并加了 定时器(TIM4);请问这是为什么?
        为什么发送要用DMA,接收却不用?为什么接收要使用 定时器?
        若用手机向sim900a发送一条信息,因为sim900a接收的字节较多,是否接收也采用 DMA方式效果会好?

    3)是否有必要在 发送和接收时 设计 环形队列、环形缓冲区 以确保数据的发送和接收的数据完整性?并且发送和接收都采用DMA方式?

    4)以下代码 没看明白:



        0XFF的判断作用是什么?
        为什么当“cmd <= 0XFF "时,要等待通道7传输完成?
        为什么将cmd 赋值给 USART2的数据寄存器?
        为什么当 ”cmd>0XFF“ 时直接调用 u2_printf("%s\r\n",cmd);  发送命令 ?

非常期待您的答复!多谢!

最佳答案

查看完整内容[请看2#楼]

1,必须学会看,否则就转行吧。 2,DMA接收不太好做,所以用中断接收,你可以自己实现DMA收。定时器用于判断是否接收完成,使用的是超时法。 3,这个你可以自己实现。我们例程无需这么复杂,已经可以很好的运行了。 4,写DR就是发送数据给串口,串口会将写入的值发送出去。判断0XFF是方便发送0X1A之类的数据。 必须先等待之前DMA数据发完(如果有在发送的话),才可以写DR,否则会冲突! cmd有2个作用: 1,发送字符串。当发送字符 ...
stay hungry stay foolish!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-12-28 12:23:04 | 显示全部楼层
1,必须学会看,否则就转行吧。
2,DMA接收不太好做,所以用中断接收,你可以自己实现DMA收。定时器用于判断是否接收完成,使用的是超时法。
3,这个你可以自己实现。我们例程无需这么复杂,已经可以很好的运行了。
4,写DR就是发送数据给串口,串口会将写入的值发送出去。判断0XFF是方便发送0X1A之类的数据。
必须先等待之前DMA数据发完(如果有在发送的话),才可以写DR,否则会冲突!
cmd有2个作用:
1,发送字符串。当发送字符串的时候,cmd是字符串首地址,其值,必定大于0XFF,因为STM32 FLASH是0X0800 0000开始的。
2,发送指令,比如0X1A,此时cmd是数字0X1A,自然少于0XFF。
发送字符串和发送单个字节,方法不一样,故要判断是否少于0XFF.

另外,楼主软件出身,我这代码应该是分分钟看懂才对啊。
而且我的函数前面还有注释。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-12-27
在线时间
0 小时
 楼主| 发表于 2014-12-28 22:56:55 | 显示全部楼层
多谢您的回复! 您的答案精辟,清楚,明白! 

    好几年没写过C程序了,最近由于公司有 项目需要才捡起来研究.
    因为我对硬件不熟 不知道:
                    0x00000000地址为启动区,上电以后,CPU从这个地址开始执行代码。
                    0x08000000是用户FLASH的起始地址,0x20000000是SRAM的起始地址。
                     不知道 字符串首地址 大于 0xff

若没您的回复, 我几天也搞不懂.
非常感谢!

stay hungry stay foolish!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-12-28 23:00:33 | 显示全部楼层
回复【3楼】liuyupretty:
---------------------------------
不客气,多玩两天就熟了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 12:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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