你好我好大家好! 发表于 2014-11-15 20:18:42

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

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


小丁^_^ 发表于 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

是的。这样测试效果如何?
页: [1] 2
查看完整版本: 软件定时触发USART请求DMA传输数据的一个问题