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

STM32F103VET6 定时器捕捉跳变沿触发DMA读取端口信息

[复制链接]
mengyu139 提问时间:2014-11-11 16:23 /
  1. /******************** (C) COPYRIGHT 2012 WildFire Team **************************
  2. by mengyu
  3. IM3_CH1 (PA.6) as capture
  4. **********************************************************************************/
  5. #include "stm32f10x.h"
  6. #include "stm32f10x_conf.h "

  7. void Delay(__IO u32 nCount);
  8. void PA8_INIT(void);
  9. void NVIC_Configuration(void);
  10. void GPIO_Configuration(void);
  11. void RCC_Configuration(void);
  12. void TIM_CAP_init(void);
  13. void GPIOE_IN_Init(void);
  14. void DMA_Port_to_ram_init(void);

  15. uint16_t COUNT = 0;
  16. uint16_t PORT_IN;
  17. int main(void)
  18. {       
  19.          /* System Clocks Configuration */
  20.   RCC_Configuration();

  21.   /* NVIC configuration */
  22.   NVIC_Configuration();

  23.   /* Configure the GPIO ports */
  24.   GPIO_Configuration();
  25.        
  26.         PA8_INIT();
  27.   GPIOE_IN_Init();
  28.        
  29.   DMA_Port_to_ram_init();
  30.        
  31.         TIM_CAP_init();
  32.         while (1)
  33.         {       
  34.                
  35.                
  36.                 Delay(2000);
  37.                 GPIO_SetBits(GPIOA, GPIO_Pin_8);
  38.                 Delay(2000);
  39.                 GPIO_ResetBits(GPIOA, GPIO_Pin_8);
  40.                 Delay(2000);
  41.                 GPIO_SetBits(GPIOA, GPIO_Pin_8);
  42.                 Delay(2000);
  43.                 GPIO_ResetBits(GPIOA, GPIO_Pin_8);
  44.                
  45.         }
  46. }

  47. void Delay(__IO u32 nCount)         //简单的延时函数
  48. {
  49.         for(; nCount != 0; nCount--);
  50. }





  51. void PA8_INIT(void)
  52. {               
  53.         /*定义一个GPIO_InitTypeDef类型的结构体*/
  54.         GPIO_InitTypeDef GPIO_InitStructure;

  55.         /*开启GPIOA的外设时钟*/
  56.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);

  57.         /*选择要控制的GPIOA8引脚*/                                                                                                                          
  58.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

  59.         /*设置引脚模式为通用推挽输出*/
  60.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

  61.         /*设置引脚速率为50MHz */   
  62.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  63.         /*调用库函数,初始化GPIOA*/
  64.           GPIO_Init(GPIOA, &GPIO_InitStructure);                  

  65.         /* 关闭所有led灯        */
  66.         GPIO_SetBits(GPIOA, GPIO_Pin_8);         
  67. }

  68. void NVIC_Configuration(void)
  69. {
  70.   NVIC_InitTypeDef NVIC_InitStructure;

  71.   /* Enable the TIM3 global Interrupt */
  72.   NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  73.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  74.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  75.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  76.   NVIC_Init(&NVIC_InitStructure);
  77. }
  78. void GPIO_Configuration(void)
  79. {
  80.   GPIO_InitTypeDef GPIO_InitStructure;

  81.   /* TIM3 channel 1 pin (PA.06) configuration */
  82.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  83.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  84.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  85.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  86. }

  87. void RCC_Configuration(void)
  88. {
  89.   /* TIM3 clock enable */
  90.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  91.   /* GPIOA and GPIOB clock enable */
  92.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  93. }

  94. void TIM_CAP_init(void)
  95. {
  96.         TIM_ICInitTypeDef  TIM_ICInitStructure;
  97.        
  98.         TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
  99.   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  100.   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  101.   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  102.   TIM_ICInitStructure.TIM_ICFilter = 0x0;

  103.   TIM_ICInit(TIM3, &TIM_ICInitStructure);
  104.   
  105.         TIM_DMACmd(TIM3, TIM_DMA_CC1, ENABLE); //ENABLE cc1 trig dma
  106.        
  107.   /* TIM enable counter */
  108.   TIM_Cmd(TIM3, ENABLE);

  109.   /* ENABLE the CC1 Interrupt Request */
  110.   TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
  111. }

  112. void DMA_Port_to_ram_init(void)
  113. {
  114.         DMA_InitTypeDef DMA_InitStructure;
  115.        
  116. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  117.        
  118.         /* DMA channel1 configuration */
  119.         DMA_DeInit(DMA1_Channel6);
  120.         DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&GPIOE->IDR; //(0x40011400 + 0X08);         //portD  
  121.         DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&PORT_IN;//内存地址
  122.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  123.         DMA_InitStructure.DMA_BufferSize = 1;
  124.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址固定
  125.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;  //内存地址固定
  126.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;        //16
  127.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//16
  128.         DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                //循环传输
  129.         DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  130.         DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  131.         DMA_Init(DMA1_Channel6, &DMA_InitStructure);
  132.        
  133.         /* Enable DMA channel_6*/
  134.         DMA_Cmd(DMA1_Channel6, ENABLE);
  135. }

  136. void GPIOE_IN_Init(void)
  137. {
  138.                 GPIO_InitTypeDef GPIO_InitStructure;

  139.          RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);
  140.         /*选择要控制的GPIOE引脚*/                                                                                                                          
  141.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;       

  142.         /*设置引脚模式为上拉或者下拉输入*/
  143.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   

  144.         /*设置引脚速率为50MHz */   
  145.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  146.         /*调用库函数,初始化GPIOC*/
  147.           GPIO_Init(GPIOE, &GPIO_InitStructure);               
  148. }




  149. /******************* (C) COPYRIGHT 2012 WildFire Team *****END OF FILE************/
复制代码


收藏 评论3 发布时间:2014-11-11 16:23

举报

3个回答
mengyu139 回答时间:2014-11-11 16:25:24
捕获.JPG
mengyu139 回答时间:2014-11-11 16:25:50
不是所有的定时器都能完成DMA触发
沐紫 回答时间:2014-11-11 17:10:43
多谢楼主!

所属标签

相似问题

官网相关资源

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