历史上的今天
返回首页

历史上的今天

今天是: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);等待发送完成

推荐阅读

史海拾趣

DB Lectro Inc公司的发展小趣事

为了进一步扩大市场份额,DB Lectro Inc积极寻求与国际知名企业的合作。通过与多家国际公司的技术交流和合作,公司成功地将自身的气体检测技术应用于更多领域,如天然气开采、食品饮料生产等。同时,公司还积极参与国际展览和交流活动,展示了其先进的技术和产品,赢得了国际市场的广泛认可。

CHONGQING PINGYANG ELECTRONICS CO.,LTD.公司的发展小趣事

重庆平洋电子有限公司,自其1998年3月创立之初,便扎根于重庆这片热土,开始了其在电子行业的探索之旅。当时,电子行业正处于快速发展的阶段,市场竞争激烈。然而,公司凭借对市场的敏锐洞察和对技术的执着追求,成功研发出多款电子元器件,逐渐在市场中站稳脚跟。

Aeroflex Metelics / Hi-Rel Components公司的发展小趣事

随着公司的发展,技术创新成为推动重庆平洋电子有限公司不断前进的重要动力。公司不断加大对研发的投入,引进高端人才,积极研发新技术、新产品。经过多年的努力,公司在电子元器件领域取得了重大突破,产品性能和质量得到了显著提升,赢得了市场的广泛认可。

AITSEMI公司的发展小趣事

随着全球化趋势的加剧,AITSEMI公司开始实施全球化战略,积极开拓海外市场。通过设立海外分支机构、参加国际展会等方式,AITSEMI成功将产品推广至全球范围,并赢得了广泛的国际认可。同时,公司还加大了品牌建设的力度,通过广告宣传、社交媒体推广等方式提升品牌影响力,进一步巩固了公司在全球电子行业的领先地位。

这些故事基于AITSEMI公司的公开资料和发展历程进行编写,旨在展示其在电子行业中的成长和发展。然而,由于公司具体的发展过程可能涉及更多的细节和未公开的信息,因此这些故事可能并不完全准确或详尽。如需更详细和准确的信息,建议直接访问AITSEMI公司的官方网站或查阅相关新闻报道。

Antex公司的发展小趣事

面对日新月异的电子行业发展趋势,Antex公司始终保持敏锐的市场洞察力和创新精神。公司积极推进技术开发、设备强化,不断探索新的生产技术和应用领域。同时,Antex还注重人才培养和团队建设,为公司的未来发展储备了丰富的人才资源。

这些故事只是Antex公司发展历程中的一部分,它们展示了公司在电子行业中的不断努力和追求卓越的精神。未来,随着技术的不断进步和市场的不断变化,Antex将继续保持创新和发展,为电子行业的繁荣做出更大的贡献。

请注意,以上内容仅为概述,并未详细展开每个故事的每一个细节。如果需要更具体、更详细的故事,建议查阅Antex公司的官方资料或相关新闻报道,以获取更准确、更全面的信息。

Caddell-Burns Manufacturing公司的发展小趣事

Caddell-Burns Manufacturing公司的创立源于两位创始人Caddell和Burns的远见卓识。上世纪80年代初,电子制造业正值蓬勃发展之际,两人看到了其中的商机,决定联手创办一家专注于电子零部件生产的公司。他们凭借自己的技术背景和行业经验,成功研发出了几款具有竞争力的产品,并逐渐在市场上站稳脚跟。在创业初期,公司虽然规模不大,但凭借过硬的产品质量和良好的客户服务,赢得了客户的信任和支持。

问答坊 | AI 解惑

Keil C51 编译、调试软件使用指南

该手册是Keil 软件公司8051 单片机软件开发工具的介绍是为新用户和有兴趣的读者准备的使用 指南只需要阅读本书就可以正确地运行和使用该软件这本用户指南包括以下章节的内容 第一章介绍 对本用户手册的概述 第二章安装 讲述怎样安装软件并设置工 ...…

查看全部问答>

人体红外感应原理

BISS0001是一款高性能的传感信号处理集成电路。静态电流极小,配以热释电红外传感器和少量外围元器件即可构成被动式的热释电红外传感器。广泛用于安防、自控等领域能。   特 点   CMOS工艺   数模混合   具有独立的高输入阻抗运算放大 ...…

查看全部问答>

在线急等小技巧....一个简单程序

   这个地方我想把254再变化大点,,但是如果到257              SUBB A, #254 ;/////////////////////////////////////////////////////////////////////////////////////////////// ...…

查看全部问答>

DS18B20 温感驱动疑问

    大家好,那位帮我解释下,为什么我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 ...…

查看全部问答>

multibin时出现filesys.exe异常?

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 ...…

查看全部问答>

第8章 进程控制

8.1   引言 1418.2   进程标识 1418.3   fork函数 1428.4   vfork 函数 1458.5   exit函数 1478.6   wait和waitpid函数 1488.7   wait3和wa ...…

查看全部问答>