STM32笔记(三)ADCDMAUSART的综合练习.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32笔记(三)ADCDMAUSART的综合练习

 STM32笔记(三)ADC、DMA、USART的综合练习 这是一个综合的例子,演示了ADC模块、DMA模块和USART模块的基本使用。   我们在这里设置ADC为连续转换模式,常规转换序列中有两路转换通道,分别是ADC_CH10(PC0)和ADC_CH16(片内温度传感器)。因为使用了自动多通道转换,数据的取出工作最适合使用DMA方式取出,so,我们在内存里开辟了一个u16 AD_Value[2]数组,并设置了相应的DMA模块,使ADC在每个通道转换结束后启动DMA传输,其缓冲区数据量为2个HalfWord,使两路通道的转换结果自动的分别落到AD_Value[0]和AD_Value[1]中。   然后,在主函数里,就无需手动启动AD转换,等待转换结束,再取结果了。我们可以在主函数里随时取AD_Value中的数值,那里永远都是最新的AD转换结果。   如果我们定义一个更大的AD_Value数组,并调整DMA的传输数据量(BufferSize)可以实现AD结果的循环队列存储,从而可以进行各种数字滤波算法。   接着,取到转换结果后,根据V=(AD_Value/4096)*Vref+的公式可以算出相应通道的电压值,也可以根据??T() =? (1.43 - Vad)/34*10^(-6) + 25的算法,得到片内温度传感器的测量温度值了。   通过重新定义putchar函数,及包含stdio.h头文件,我们可以方便的使用标准C的库函数printf(),实现串口通信。   相关的官方例程,可以参考FWLib V2.0的ADC\ADC1_DMA和USART\printf两个目录下的代码。 本代码例子是基于万利199的开发板EK-STM32F实现,CPU=STM32F103VBT6 /****************************************************************************** * 本文件实现ADC模块的基本功能 * 设置ADC1的常规转换序列包含CH10和CH16(片内温度传感器) * 设置了连续转换模式,并使用DMA传输 * AD转换值被放在了AD_Value[2]数组内,[0]保存CH0结果,[1]保存CH16结果 * GetVolt函数计算[0]的值对应的电压值(放大100倍,保留2位小数) * GetTemp函数计算[1]的值对应的温度值,计算公式在相应函数内有说明 *? 作者:jjldc(九九) *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include stm32f10x_lib.h #include stdio.h /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define ADC1_DR_Address??? ((u32)0x4001244C) /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ vu16 AD_Value[2]; vu16 i=0; s16? Temp; u16? Volt; /* Private function prototypes -----------------------------------------------*/ void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); void USART1_Configuration(void); void ADC1_Configuration(void); void DMA_Configuration(void); int fputc(int ch, FILE *f); void Delay(void); u16 GetT

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档