你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

软件定时触发USART请求DMA传输数据的一个问题

[复制链接]
你好我好大家好! 提问时间:2014-11-15 20:18 /
       想利用DMA在内存和USART的数据寄存器之间,每隔100毫秒传输一次数据。
       实现方法是:用的SysTickConfig()定时器每隔100毫秒产生一次中断,然后在中断里面应该写一句有关“USART请求DMA传输数据”的语句吧?但是好像找了半天手册都找不到关于这个功能的寄存器,,有没有路过的高手可以指点下啊,谢了


收藏 评论15 发布时间:2014-11-15 20:18

举报

15个回答
小丁^_^ 回答时间:2014-11-15 22:23:41
在STM32 3.5库里面就有关于DMA_Interrupt的例子,可以参考之
你好我好大家好! 回答时间:2014-11-16 09:45:09
小丁^_^ 发表于 2014-11-15 22:23
在STM32 3.5库里面就有关于DMA_Interrupt的例子,可以参考之

谢谢了,我看了看你说的那个例程。和我表达的不是一个意思。我想实现的功能是:用DMA在串口和内存之间,每0.1s传输一次数据,这肯定的用到系统滴答定时器SysTickConfig()吧,然后在SysTickConfig()中断函数里面写一条关于串口请求DMA传输数据的语句,但是我在手册上找了半天还是找不到有关于串口请求DMA传输数据功能的寄存器,望高手指点一下,这个功能在哪里可以配置啊??万分感谢
你好我好大家好! 回答时间:2014-11-16 19:26:06
本帖最后由 你好我好大家好! 于 2014-11-16 19:28 编辑

看来是没有人回答了,还是自己回答一下吧:在SysTickConfig()中断函数服务函数中,只要写入这几句话就可以实现上述功能了:void SysTick_Handler(void)
                                {   //Tx通道传输数据量重加载
                                            DMA_Cmd(USARTx_TX_DMA_CHANNEL,DISABLE);         
                                        DMA1_Channel2->CNDTR=0x0A;
                                        DMA_Cmd(USARTx_TX_DMA_CHANNEL,ENABLE);         
        
                                      //Rx通道传输数据量重加载
                                       DMA_Cmd(USARTx_RX_DMA_CHANNEL,DISABLE);
                                          DMA1_Channel3->CNDTR=0x0A;
                                       DMA_Cmd(USARTx_RX_DMA_CHANNEL, ENABLE);

}              这个程序是一次要传输10个数据,传输数据量的值为0x0A
沐紫 回答时间:2014-11-18 14:13:57
加油!楼主自力更生。

也谢谢2楼朋友呢
回答时间:2014-11-18 16:43:15
不建议在滴答时钟里面加处理。可以通过在while里面定时器差值判断来发送数据。传输的设置和楼主设置一样就可以了。
你好我好大家好! 回答时间:2014-11-20 12:07:56
安 发表于 2014-11-18 16:43
不建议在滴答时钟里面加处理。可以通过在while里面定时器差值判断来发送数据。传输的设置和楼主设置一样就 ...

您好啊,我是新手,您能不能举个例子啊(就是如何在while里面用定时器差值来判断发送数据),谢谢了
回答时间:2014-11-20 14:05:09
比如滴答时钟中断中增加一个32位的变量。直接在中断中执行a++就可以了。再定义一个b,当a-b>规定时间时,发送数据,并且b=a;
你好我好大家好! 回答时间:2014-11-21 20:29:24
安 发表于 2014-11-20 14:05
比如滴答时钟中断中增加一个32位的变量。直接在中断中执行a++就可以了。再定义一个b,当a-b>规定时间时,发 ...

按您说的程序应该是这样吧
    void SysTick_Handler(void)
      {
        a++;
       }
然后再主函数中这样写:while(1)
                                 {        *
                                           *
                                    if(a-b>规定时间)
                                        {
                                            发送数据;
                                            b=a:
                                         }
                                             *
                                             *
                                             *
                                  }
                             
回答时间:2014-11-24 09:21:58
是的。这样测试效果如何?
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版