stm32-ADC多通道采样例程(HAL库).docx

stm32-ADC多通道采样例程(HAL库).docx

ID:58676296

大小:568.06 KB

页数:17页

时间:2020-10-15

stm32-ADC多通道采样例程(HAL库).docx_第1页
stm32-ADC多通道采样例程(HAL库).docx_第2页
stm32-ADC多通道采样例程(HAL库).docx_第3页
stm32-ADC多通道采样例程(HAL库).docx_第4页
stm32-ADC多通道采样例程(HAL库).docx_第5页
资源描述:

《stm32-ADC多通道采样例程(HAL库).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Stm32基于HAL库ADC多通道采样例程1、用cubemx建立工程,cubemx5.3.0版本,芯片型号:stm32f103zet6(1)开启外部高速时钟HSE,配置系统时钟为72M注意:ADC1时钟配置为9MHz(2)配置串口1,设置好波特率并开启串口中断1、启用ADC1通道1,3,4,5,6注意要先设置好通道数量才能配置,各自ADC通道的参数。Rank是转换顺序,我们按1,2,3,4,5的顺序分别对应ADC1通道0,1,4,5,6。多通道采样要开启扫描工作模式,在这里我们还有开启连续转换方式,连续转换是在ADC转换按照约定的转换顺序全部通道完成一次转换后,又自动启

2、动下一次转换。1、启用ADC转换DMA传输,多通道转换时要启用ADC的DMA传输,才能在相应的通道转换完成后,DMA自动去获取转换值。中断方式没法在多通道采样时使用,因为在多通道扫描模式下,只有在最后一个通道转换结束时才会产生中断请求。而ADC数据寄存器是共用的,这时候进入中断取值只能得到一个通道的数值。1、到此,基础配置和ADC通道配置已经完成,接着我们设置工程名称和保存路径等就可以了,一般工程名和保存路径最好不要有中文,不然可能会出现一些意想不到的问题,在测试的过程中就遇到工程名或者保存路径中都用英文但是词组名称之间用空格隔开,在打开生成的工程文件后,向新建的分类文

3、件夹中添加自己写的xxx.c文件,就导致keil软件卡死,不知道是keil软件还是cubemx的问题。1、设置好工程名称和路径后就可以生成代码了,生成代码后我们选择打开工程。接着我们开始编写代码(1)首先我们要修改main函数的一个错误,就是在初始化时要把MX_DMA_Init()函数放在MX_ADC1_Init()函数之前执行,cubemx生成代码时MX_DMA_Init()是在ADC初始化函数之后。如果在后面则转换时打印输出的ADC值,大多数都为0,具体原因就不知道是怎么回事了,应该是cubemx这个版本还不太稳定。接下来我们在usart.c文件中增加一些代码1)增

4、加printf重定向到串口的代码,并定义一个串口接收到数据的标志变量和数据缓冲数组。作用是在我们用串口调试助手给单片机发送数据时才打印输出ADC数据。uint8_tRecFlag,RxBuf[512];【代码】:////重定向c库函数printf到USARTxstruct__FILE//标准库需要的支持函数{inthandle;};intfputc(intch,FILE*f){while((huart1.Instance->SR&0X40)==0);//循环发送,直到发送完毕huart1.Instance->DR=(uint8_t)ch;return(ch);}1)编写

5、串口数据接收函数voidMy_UsartDateRec(UART_HandleTypeDef*huart),这里就不在回调函数中编写了,然后stm32f1xx_it.c文件中的串口中断函数中调用这个函数来接收串口数据。此外我们还需要在串口初始化函数voidHAL_UART_MspInit(UART_HandleTypeDef*uartHandle)中,增加使能串口接收中断和空闲中断。__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);//使能接收中断__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);/

6、/使能空闲中断记得在stm32f1xx_it.c文件开始部分包含usart.h头文件。【代码】:voidMy_UsartDateRec(UART_HandleTypeDef*huart){//uint8_ttemp=0;staticunsignedintnum;//接收计数//查询是否发生了空闲中断if(__HAL_UART_GET_FLAG(huart,UART_FLAG_IDLE)!=RESET&&__HAL_UART_GET_IT_SOURCE(huart,UART_IT_IDLE)!=RESET){RecFlag=1;//收到数据num=0;__HAL_UART

7、_CLEAR_IDLEFLAG(huart);//清除空闲中断}elseif(__HAL_UART_GET_IT_SOURCE(huart,UART_IT_RXNE)!=RESET)//帧传输未完成,按字节接收{if(numInstance->DR);//else//缓冲区溢出//temp=huart->Instance->DR;__HAL_UART_CLEAR_FLAG(huart,UART_FLAG_RXNE);}}(1)在adc.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。