STM32_DAC输出三角波形

推荐

分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang

 

今天的软件工程下载地址(360云盘):

https://yunpan.cn/cPi8GB2DyeKzI  访问密码 1a45

 

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2   访问密码 ca90

 

工程概要说明:该工程通过配置,输出固定三角波形,频率和幅度也是固定的,当然也是可以变化,如果有朋友需要可以微信公众号中留言。

 

关于“STM32F103  DAC输出三角波形” 我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。

 

一、RCC时钟配置

 

该函数位于在bsp.c文件下面;

使能RCC时钟:RCC_APB1Periph_TIM2 和 RCC_APB1Periph_DAC (正对该工程主要的两项)。

 

二、引脚配置

 

该函数位于在dac.c文件下面;

这里是对SPI所使用引脚进行配置。

这里DA1和DA2都使用。

 

三、DAC配置

 

该函数位于在dac.c文件下面;

对DA进行配置。

配置的每一条语句都有注释,请看源代码.

注意:

这里的重点就是上面“红色”是两项。

 

四、触发时钟

 

该函数位于在timer.c文件下面;

输出的频率就是又该时钟决定的,请看源代码,不懂的微信我。

 

五、今天的重点提示

DA可以输出很多种波形,感兴趣的朋友可以细心研究一下,后期我应该还有讲解更高级一点的内容。但今天主要的内容就是关于频率和幅度的调节,感兴趣的朋友可以修改参数试一试,我的工程都经过实物板子测试过的,请放心下载使用。

 

六 、 升级版工程(增加的接口)

这里的函数接口是在上面的软件工程中升级的版本,我也将它另存为一个软件工程。

函数接口直接调用,频率、幅度方便

请前往微信公众号2016.05.11发表的文章获取下载地址。

 

调用接口:DAC1_OutTriangle(0, DAC_TriangleAmplitude_2047, 100);

输出的波形效果:

 

 

下载方式:长按网站 ->选择复制 ->打开

或者复制网站在电脑上下载也可。

 

我的网站:https://www.strongerhuang.com

我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。

微信公众号
你可以使用STM32DAC模块来输出一个波,然后使用ADC模块来采集这个波。下面是一个简单的例子,展示了如何使用STM32Cube HAL库来实现这个功能。 首先,你需要配置DAC和ADC的引脚和模式。例如,你可以选择一个DAC通道输出一个三角波,然后将该通道连接到ADC输入引脚。 接下来,你需要初始化DAC和ADC模块。在初始化DAC时,你可以设置输出的幅值和频率。在初始化ADC时,你需要配置输入通道和采样率等参数。 然后,在主循环中,你可以使用DAC模块来生成波,并同时使用ADC模块来采集该波。 以下是一个简单的示例代码,展示了如何实现这个功能: ```c #include "stm32f4xx_hal.h" DAC_HandleTypeDef hdac; ADC_HandleTypeDef hadc; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DAC_Init(void); static void MX_ADC1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DAC_Init(); MX_ADC1_Init(); HAL_DAC_Start(&hdac, DAC_CHANNEL_1); HAL_ADC_Start(&hadc); while (1) { for (uint16_t i = 0; i < 4096; i++) { HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, i); HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY); uint16_t adcValue = HAL_ADC_GetValue(&hadc); // 在这里可以处理采集到的ADC值 } } } void SystemClock_Config(void) { // 系统时钟配置 } static void MX_GPIO_Init(void) { // GPIO初始化配置 } static void MX_DAC_Init(void) { hdac.Instance = DAC; HAL_DAC_Init(&hdac); DAC_ChannelConfTypeDef sConfig = {0}; sConfig.DAC_Trigger = DAC_TRIGGER_NONE; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1); } static void MX_ADC1_Init(void) { hadc.Instance = ADC1; hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ScanConvMode = DISABLE; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc.Init.ContinuousConvMode = ENABLE; hadc.Init.NbrOfConversion = 1; hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; HAL_ADC_Init(&hadc); ADC_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = ADC_CHANNEL_0; // 根据实际情况选择ADC通道 sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; HAL_ADC_ConfigChannel(&hadc, &sConfig); } ``` 请记得根据你的具体硬件配置和需求进行适当的修改。希望对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值