OpenEdv-开源电子网

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

有谁用hal库写过定时器触发的ad采集的程序吗 定时器和ad设置有什么要注意的地方

[复制链接]

10

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
519
金钱
519
注册时间
2016-7-28
在线时间
100 小时
发表于 2016-10-19 14:38:27 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
519
金钱
519
注册时间
2016-7-28
在线时间
100 小时
 楼主| 发表于 2016-10-19 14:38:28 | 显示全部楼层
回复

使用道具 举报

10

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
519
金钱
519
注册时间
2016-7-28
在线时间
100 小时
 楼主| 发表于 2016-10-19 14:39:19 | 显示全部楼层
/************************************************************/
/*Hal库adc初始化*/               
/************************************************************/



void MY_ADC_Init(void)
{        

       
       
                //adc初始化
    ADC1_Handler.Instance=ADC1;
    ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV2;   //2分频,ADCCLK=168/8=21MHZ  ADC_CLOCK_SYNC_PCLK_DIV2
    ADC1_Handler.Init.Resolution=ADC_RESOLUTION_12B;             //12位模式
    ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT;             //右对齐
    ADC1_Handler.Init.ScanConvMode=DISABLE;                      //非扫描模式
    ADC1_Handler.Init.EOCSelection=DISABLE;                      //开启EOC中断
    ADC1_Handler.Init.ContinuousConvMode=DISABLE;                //关闭连续转换
    ADC1_Handler.Init.NbrOfConversion=1;                         //1个转换在规则序列中 也就是只转换规则序列1
    ADC1_Handler.Init.DiscontinuousConvMode=ENABLE;             //开启不连续采样模式
    ADC1_Handler.Init.NbrOfDiscConversion=0;                     //不连续采样通道数为0
    ADC1_Handler.Init.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T5_CC1;       //当前ADC_EXTERNALTRIGCONV_T5_CC1使用定时器5触发  ADC_SOFTWARE_START软件触发
    ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_FALLING;//当前ADC_EXTERNALTRIGCONVEDGE_FALLING下降沿触发  ADC_EXTERNALTRIGCONVEDGE_NONE使用软件触发
    ADC1_Handler.Init.DMAContinuousRequests=DISABLE;             //关闭DMA请求
    HAL_ADC_Init(&ADC1_Handler);                                 //初始化
       
                ADC_ChannelConfTypeDef ADC1_ChanConf;   
    ADC1_ChanConf.Channel=0;                                   //通道
    ADC1_ChanConf.Rank=1;                                       //第1个序列,序列1
    ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_15CYCLES;        //采样时间
    ADC1_ChanConf.Offset=0;                 
          HAL_ADC_ConfigChannel(&ADC1_Handler,0);        //通道配置

          HAL_ADC_Start(&ADC1_Handler);                               //开启ADC
//       
    HAL_ADC_PollForConversion(&ADC1_Handler,10);                //轮询转换
}
               
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_ADC1_CLK_ENABLE();            //使能ADC1时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();                        //开启GPIOA时钟
       
    GPIO_Initure.Pin=GPIO_PIN_0;            //PA0
    GPIO_Initure.Mode=GPIO_MODE_ANALOG;     //模拟
    GPIO_Initure.Pull=GPIO_NOPULL;          //不带上下拉
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}       
回复

使用道具 举报

10

主题

46

帖子

0

精华

高级会员

Rank: 4

积分
519
金钱
519
注册时间
2016-7-28
在线时间
100 小时
 楼主| 发表于 2016-10-19 14:40:20 | 显示全部楼层
void MX_TIM5_Init(uint32_t Prescaler,uint32_t Period)
{

  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim5.Instance                         = TIM5;
  htim5.Init.Prescaler                 = Prescaler;
  htim5.Init.CounterMode         = TIM_COUNTERMODE_UP;
  htim5.Init.Period                 = Period;
  htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
        HAL_TIM_PWM_DeInit(&htim5);
        HAL_TIM_PWM_Init(&htim5);


  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
        HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig);


  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 500;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1);

  //HAL_TIM_MspPostInit(&htim5);
  HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1);//开启PWM通道1

}

//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
                void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
                {
                        GPIO_InitTypeDef GPIO_Initure;
                __HAL_RCC_TIM5_CLK_ENABLE();                        //使能定时器5
                        __HAL_RCC_GPIOA_CLK_ENABLE();                        //开启GPIOA时钟

                        GPIO_Initure.Pin=GPIO_PIN_0;                   //PA0
                        GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用推挽输出
                        GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
                        GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
                        GPIO_Initure.Alternate= GPIO_AF2_TIM5;        //PA0复用为TIM5_CH1
                        HAL_GPIO_Init(GPIOA,&GPIO_Initure);
                }       
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2016-10-20 22:15:00 | 显示全部楼层
arels 发表于 2016-10-19 14:40
void MX_TIM5_Init(uint32_t Prescaler,uint32_t Period)
{

搞定了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

12

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-4-23
在线时间
21 小时
发表于 2016-11-23 22:57:51 | 显示全部楼层
这样就会定时去采AD了吗?如果我采了AD还需要有后续的操作,代码怎么写??求教!!@正点原子 @arels
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-25
在线时间
7 小时
发表于 2017-9-25 15:09:24 | 显示全部楼层
大神,参考您的代码我尝试用TIMER1来触发AD,可是一直不成功……不知道为啥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 16:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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