历史上的今天
今天是:2025年04月23日(星期三)
2019年04月23日 | STM32学习笔记-ADC采集-串口2发送至上位机
2019-04-23 来源:eefocus
串口2的配置(一根杜邦线不行纠结了半天)
void USART2_Initialise( u32 bound )
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
/* Enable the USART2 Pins Software Remapping */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/* Configure USART2 Rx (PA.03) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART2 Tx (PA.02) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Enable the USART2 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_InitStructure.USART_BaudRate = bound;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART2, &USART_InitStructure);
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
USART_Cmd(USART2, ENABLE);
}
原理与串口一相同,只是io口不同,所在总线不同
ADC1的配置
void Adc_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
}
io口配置与点亮第一个led灯类似,模拟输入模式即可
与配置其他功能类似,ADC的配置也是一个结构体变量传入参数
ADC_InitTypeDef结构体变量名
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );
使能ADC1通道时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); 设置ADC分频因子 72/6=12M
ADC_DeInit(ADC1);复位ADC
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC工作模式ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;模数转换在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;模式转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC数据对齐方式
ADC_InitStructure.ADC_NbrOfChannel = 1;顺序进行转换的ADC通道数
ADC_Init(ADC1, &ADC_InitStructure);传入结构体地址,初始化ADC
ADC_Cmd(ADC1, ENABLE);使能ADC
ADC_ResetCalibration(ADC1);使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1));等待复位校准结束
ADC_StartCalibration(ADC1);开启AD校准
while(ADC_GetCalibrationStatus(ADC1));等待校准结束
获取ADC函数传入参数adc通道号
u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
}
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );ADC1,通道1,采样时间为239.5个周期
ADC_SoftwareStartConvCmd(ADC1, ENABLE);使能指定ADC1软件转换启动功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));等待转换结束
return ADC_GetConversionValue(ADC1);返回最后一次ADC的转换结果

ADC通道对应io口如图
p=adcx;
p=(3.3/4096)*p;
p=p*10000;
v=(int)p;
USART_SendData(USART2,0x76);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,0x3D);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,(48+v/10000));
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,0x2E);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,(48+v%10000/1000));
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,(48+v%10000%1000/100));
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,(48+v%10000%1000%100/10));
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,(48+v%10000%1000%100%10));
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
USART_SendData(USART2,0x0A);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
采集adc以ASCII方式发送给上位机
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);等待发送完成
史海拾趣
|
该手册是Keil 软件公司8051 单片机软件开发工具的介绍是为新用户和有兴趣的读者准备的使用 指南只需要阅读本书就可以正确地运行和使用该软件这本用户指南包括以下章节的内容 第一章介绍 对本用户手册的概述 第二章安装 讲述怎样安装软件并设置工 ...… 查看全部问答> |
|
这个地方我想把254再变化大点,,但是如果到257 SUBB A, #254 ;/////////////////////////////////////////////////////////////////////////////////////////////// ...… 查看全部问答> |
|
大家好,那位帮我解释下,为什么我S3C2440 的温度传感器驱动程序 如果使用 DS18B20 不接外部上拉电阻, 就可以正常输出, 接了外部上拉电阻后就不能正常输出了?… 查看全部问答> |
|
疯了,spi读函数一加入类似v_SPIReg->SPSTA0 对寄存器的代码,就出Data Abort:问题 在spi读函数中调用下面的代码 while(!(pSpiHWInfoHead->v_SPIReg->SPSTA0 & 0x01)); pSpiHWInfoHead->v_SPIReg->SPTDAT0=0xFF; while(!(pSpiHWInfoHead->v_SPIReg->SPSTA0 & 0x01));&nbs ...… 查看全部问答> |
|
2440实现multibin,FLASH为K9F1G08.生成的xip.bin文件烧写到FLASH后,运行到xipkernel时出现文件系统异常。 在.map文件中查了下,好像是coredll.dll中的 InitLocale函数出错了。请问哪位大侠能解决这个问题?出错打印 输出如下: + FMD_OEMIoCon ...… 查看全部问答> |
|
好久没有来坛子逛逛,回复,发帖什么的了,不好意思哈。;P 倒不是因为工作忙,是因为我处于这个时间,不知道和大家交流一点什么。 今天中午QQ上收到琳子姐的留言,提醒了我。我是觉得有必要和大家分享一下我现在的工作状态了。 让你们 ...… 查看全部问答> |
|
STM32的唯一ID可以修改!解密的发现了这个!(ID加密失效) STM32 破解 : 1、STM32 程序没办法读出来(他们直接把 IC 芯片开盖,这边要 13.5W) 2、要是使用了 ID 加密的 (提供修改 ID 的烧写工具 另外付费5 ...… 查看全部问答> |




