您的位置 首页 基础

STM8L探究套件学习笔记-信号发生器(十四)

STM8L有一个DAC通道,能够将数字信号转为模拟信号。官方范例中使用DAC和DMA、TIM4作为一个信号发生器,首先先逐个介绍下每个功能:DMA用于

STM8L有一个DAC通道,可以将数字信号转为模拟信号。官方典范中运用DAC和DMA、TIM4作为一个信号发生器,首要先逐一介绍下每个功用:
DMA用于供给外设与内存或许内存与内存的高速数据传递,数据可以直接由DMA移动,而无需CPU操作,这样可以使得CPU的资源可以用于其他操作。DMA控制器有4个通道,每个通道用于办理一个或许多个外设的内存拜访恳求。内部有裁定办理DMA拜访的优先权。由所以8位,DMA最大数据量为255。
DAC模块是12比特数模转化器电压输出,DAC可以装备为8比特或许12比特形式,可以运用DMA控制器。在12比特形式下,数据可以挑选左/右对齐,在中等形式器材下有1个输出通道,在中等+和高密度器材有2个输出通道。输入内部参阅电压VREF可以获得更好的视点。
DAC可以装备为软件触发和TIM4外部触发形式,咱们运用TIM4外部触发形式可以方便地调整输出频率。官方例程运用寄存器操作,比较难明。这儿咱们运用固件库先创立一个简略地信号发生器,可以挑选生成信号的类型,并运用板上的LCD显现信号的称号。
代码如下:
void main(void)
{
//CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//体系1分频,16M
/* 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);
LCD_GLASS_Init();
/* DMA channel3 Config —————————————————————–*/
DMA_GlobalDeInit();
DMA_DeInit(DMA1_Channel3);
DMA_Init(DMA1_Channel3,WavesTab[0], DAC_CH1RDHRH_ADDRESS,
130, DMA_DIR_MemoryToPeripheral, DMA_Mode_Circular,
DMA_MemoryIncMode_Inc, DMA_Priority_High, DMA_MemoryDataSize_HalfWord);

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

/* DAC Channel1 Config: 12bit right—————————————————–*/
/* DAC deinitialize */
DAC_DeInit();
/* Fill DAC Init param DAC_Trigger_T4_TRGO andDAC Channel1 Init */
DAC_Init(DAC_Channel_1, DAC_Trigger_T4_TRGO, DAC_OutputBuffer_Enable);

/* Enable DAC Channel1 */
DAC_Cmd(DAC_Channel_1, ENABLE);
/* Enable DMA for DAC Channel1 */
DAC_DMACmd(DAC_Channel_1, ENABLE);

/********* TIM4 Config ********/
/* TIM4 Configuration */
TIM4_DeInit();
/* Time base configuration */
TIM4_TimeBaseInit(TIM4_Prescaler_16, 0xFF);
/* TIM4 TRGO selection */
TIM4_SelectOutputTrigger(TIM4_TRGOSource_Update);
/* TIM4 enable counter */
TIM4_Cmd(ENABLE);

/* Init Eval Board used Buttons*/
GPIO_Init(KEY_PORT,KEY_PIN,GPIO_Mode_In_FL_IT);
//输入浮空-中止
/* Set PC1 sensitivity to falling edge and low level下降沿低电平触发*/
EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling_Low);
/* Set the EXTI1 IRQ (which is connected to key button) level to 1 */
ITC_SetSoftwarePriority(EXTI1_IRQn, ITC_PriorityLevel_1);
/* enable interrupts by setting level 0 */
enableInterrupts();
LCD_GLASS_DisplayString(“TRIANG”);
BAR_ALL_OFF;
/* Infinite loop */
while (1)
{

}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/260271.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部