[STM8]

STM8L151K4 DAC DMA传输程序 刚调通

[复制链接]
1674|3
手机看帖
扫描二维码
随时随地手机跟帖
cnb12345|  楼主 | 2016-7-8 10:09 | 显示全部楼层 |阅读模式
static void CLK_Config(void)
{
  /* Select HSE as system clock source */
  CLK_SYSCLKSourceSwitchCmd(ENABLE);
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);
  /* system clock prescaler: 1*/
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)
  {}
  /* Enable Clocks of DAC, TIM4 and DMA1 */
  CLK_PeripheralClockConfig(CLK_Peripheral_DAC, ENABLE);
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);
  CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);

  CLK_CCOConfig(CLK_CCOSource_HSE,CLK_CCODiv_8);//时钟输出
  CLK_PeripheralClockConfig(CLK_Peripheral_COMP,ENABLE); //因为DAC 用到比较器,所以要打开比较器时钟
}


/**
  * @brief  Configure DMA peripheral
  * @param  None
  * @retval None
  */
static void DMA_Config(void)
{
  /* DMA channel3 Config -----------------------------------------------------*/
  DMA_GlobalDeInit();
  DMA_DeInit(DMA1_Channel3);
  DMA_Init(DMA1_Channel3,  (uint16_t)&Sine12bit, DAC_DR_ADDRESS, //Sine12bit 是要DMA 传达输到DAC 中的数组首址  DAC_DR_ADDRESS 是DAC 数据寄存器首址
           250, DMA_DIR_MemoryToPeripheral, DMA_Mode_Circular,   //250 是数组大小
           DMA_MemoryIncMode_Inc, DMA_Priority_High, DMA_MemoryDataSize_HalfWord);

  /* DMA1 Channel 3 enable */
  DMA_Cmd(DMA1_Channel3, ENABLE);
  DMA_GlobalCmd(ENABLE);
}

/**
  * @brief  Configure DAC peripheral
  * @param  None
  * @retval None
  */
static void DAC_Config(void)
{
  /* DAC Channel1 Config: 12bit right ----------------------------------------*/
  /* DAC deinitialize */
  
  SYSCFG_RIIOSwitchConfig (RI_IOSwitch_15, ENABLE); //打开PB4 DAC
  DAC_DeInit();
  
  /* Fill DAC Init param DAC_Trigger_T4_TRGO and  DAC Channel1 Init */
  DAC_Init(DAC_Channel_1, DAC_Trigger_T4_TRGO, DAC_OutputBuffer_Enable);
  //DAC_SetChannel1Data(DAC_Align_12b_R,0x0FFF); //DMA 模式可以不用
  /* Enable DAC Channel1 */
  DAC_Cmd(DAC_Channel_1, ENABLE);
  
  /* Enable DMA for DAC Channel1 */
  DAC_DMACmd(DAC_Channel_1, ENABLE);
}

/**
  * @brief  Configure TIM4 peripheral
  * @param  None
  * @retval None
  */
static void TIM4_Config(void)// 用做DAC更新
{
  TIM4_DeInit();
  /* Time base configuration */
  TIM4_TimeBaseInit(TIM4_Prescaler_32, 0x01);//UP 计数器  从0 上升到 ARR寄存器中的值时溢出, 时钟不能太快,否则有问题
  
  /* TIM4 TRGO selection */
  TIM4_SelectOutputTrigger(TIM4_TRGOSource_Update);
  
  /* TIM4 enable counter */
  TIM4_Cmd(ENABLE);
}
mmuuss586| | 2016-7-8 12:00 | 显示全部楼层

谢谢分享经验;

使用特权

评论回复
cnb12345|  楼主 | 2016-7-11 09:13 | 显示全部楼层

不用谢

使用特权

评论回复
threetigher| | 2016-10-20 15:53 | 显示全部楼层
本帖最后由 threetigher 于 2016-10-20 15:54 编辑

谢谢分享!
8L151的DAC可以用来干什么?是输出sin么(Sine12bit)?频率最高可到多少?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

720

帖子

1

粉丝