Stm32标准库函数4——BlueTooth采集串口AD数据发送给电脑或者单片机

news2025/2/6 20:18:21

 

#include "stm32f10x.h"    //在该头文件中默认定义系统时钟为72M
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "adc.h"
//将USB转串口模块的Txd引脚电平通过蓝牙模块传送到单片机Rxd;同时也将单片机的Txd引脚电平通过蓝牙模块传送到USB转串口模块的Rxd
//蓝牙模块:Rxd-A9 Txd-A10,波特率460800;AD为A1
//电脑或单片机:Txd-A1;Rxd-A2;

extern u8 uartFlag;
u16 AdcValue;

void init_Rxd(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);    //使能USART1,GPIOA时钟
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;               //STBY    高电平时,电机正常动作
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}


void USART1_IRQHandler(void)                    //串口1中断服务程序
{
  u8 dat;
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    //若接收数据寄存器满
  {     
    dat = (u8)(USART_ReceiveData(USART1)&0xff);   //第2个字节才是接受到的数据
    //USART1_SendData(dat);    
        if(dat>100)
            GPIO_SetBits(GPIOA, GPIO_Pin_2);
    else
      GPIO_ResetBits(GPIOA, GPIO_Pin_2);            
  }

}

int main(void)
{        
       //u16 adcx;
//    float temp;
    delay_init();             //延时函数初始化      
    NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(460800);         //串口初始化为460800
    Adc_Init();                  //ADC初始化
  init_Rxd();
     while(1)
    {
    AdcValue=Get_Adc_Average(ADC_Channel_1,4);
//      Show_u16(AdcValue);
        AdcValue=AdcValue>>4;        
//        USART1_SendData(AdcValue);//十六进制,发送AD高8位数据
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //Tansmit Data Register empty interrupt        
        USART_SendData(USART1, AdcValue);
//      delay_ms(100);
    }    
}

 #include "adc.h"
 #include "delay.h"
                                                              
void  Adc_Init(void)
{     
    ADC_InitTypeDef ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1    , ENABLE );      //使能ADC1通道时钟
 

    RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

    //PA1 作为模拟通道输入引脚                         
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        //模拟输入引脚
    GPIO_Init(GPIOA, &GPIO_InitStructure);    

    ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

    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_InitStruct中指定的参数初始化外设ADCx的寄存器   

 
    ADC_Cmd(ADC1, ENABLE);    //使能指定的ADC1
    
    ADC_ResetCalibration(ADC1);    //使能复位校准  
    
    while(ADC_GetResetCalibrationStatus(ADC1));    //等待复位校准结束
    
    ADC_StartCalibration(ADC1);     //开启AD校准
 
    while(ADC_GetCalibrationStatus(ADC1));     //等待校准结束
 
//    ADC_SoftwareStartConvCmd(ADC1, ENABLE);        //使能指定的ADC1的软件转换启动功能

}                  
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
      //设置指定ADC的规则组通道,一个序列,采样时间
    ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_1Cycles5 );    //ADC1,ADC通道,采样时间为28.5周期                      
 
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);        //使能指定的ADC1的软件转换启动功能    
    
    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

    return ADC_GetConversionValue(ADC1);    //返回最近一次ADC1规则组的转换结果
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
    u32 temp_val=0;
    u8 t;
    for(t=0;t<times;t++)
    {
        temp_val+=Get_Adc(ch);
//        delay_ms(5);
    }
    return temp_val/times;
}     

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux编辑器-vim的使用

vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以在终端运行&#xff0c;也可以运行于xwindow、 mac o…

Unity Addressables资源管理 分析器 AnalyzeRule

Addressables资源管理总目录 0.窗口位置 打开的窗口 1.Fixable Rules 可修复的规则 1.1 Check Duplicate Bundle Dependencies 检查重复的Bundle依赖项 此规则通过扫描所有使用BundledAssetGroupSchemas的组&#xff0c; 并投影asset组布局来检查可能冗余的asset。 …

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.6 Nacos与Eureka的区别有哪些?【服务发现】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.6 Nacos与Eureka的区别有哪些&#xff1f;【服务发现】54.6.1 Nacos 的服务拉取…

基于STM32单片机智能自动伸缩衣架雨滴重量光强温度检测伸缩速度可调-蓝牙版

实践制作DIY- GC0010-智能自动伸缩衣架 一、功能说明&#xff1a; 基于STM32单片机设计-智能自动伸缩衣架 功能介绍&#xff1a; 基于STM32F103C系列&#xff0c;LCD1602显示器&#xff0c;光敏电阻采集光强&#xff0c;雨滴传感器&#xff0c;ULN2003控制步进电机&#xff0…

【Redis实战专题】「技术提升系列」彻底分析探究Redission实现分布式锁的点点滴滴

Redission的简介 Redission 为 Redis 官网分布式解决方案 官网&#xff1a; Redisson: Redis Java client with features of In-Memory Data Grid 快速入门&#xff1a; https://github.com/redisson/redisson#quick-start github的Redission系列&#xff1a;https://github…

SpringCloud学习笔记——Eureka 和 Nacos注册

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

2022年人工智能行业研究报告

第一章 行业概况 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支&#xff0c;它企图了解智能的实质&…

电脑剪辑视频用什么工具?好用的视频剪辑工具推荐

电脑剪辑视频用什么工具&#xff1f;小编通过搜集&#xff0c;给大家带来了几款比较适合做视频剪辑的工具。 一、Windows自带视频编辑器 win10自带的免费视频编辑器吗&#xff1f;我相信很多人应该不知道吧&#xff01;其实电脑自带的视频编辑器&#xff0c;也是可以进行裁剪视…

计算机毕业设计 SSM与Vue的宿舍后勤管理系统(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.2.2 系统操作流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于…

BCN基团endo-BCN-SS-NHS ester

【产品描述】 endo-BCN-SS-NHS ester中BCN基团可以发生相应的点击反应&#xff0c;二硫键在化学上是一条从结合硫醇而衍生的单共价键。它又称为二硫键或双硫桥&#xff0c;差不多只用于生物化学的范畴。 【中文名称】endo 丙烷环辛炔-双硫键-活性酯 【英文名称】 endo-BCN-SS-N…

【人脸识别】LBP人脸识别【含GUI Matlab源码 1282期】

⛄一、LBP简介 LBP&#xff08;Local Binary Pattern&#xff0c;局部二值模式&#xff09;是一种用来描述图像局部纹理特征的算子&#xff1b;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikinen, 和D. Harwood 在1994年提出&#xff0c;用于纹理特…

2022注定的不平凡我

这次的时光好像没有追溯了&#xff0c;追溯请看这一篇文章拜拜嘞——老东家 时间很短&#xff0c;变化很快&#xff0c;一时间还有些承受不了&#xff0c;入职的两个月零四天&#xff0c;很突然的我被炒鱿鱼了。 依稀记得那个周五&#xff0c;Hr找我谈话&#xff0c;说目前达…

在3568开发板上开发外设模块——竟如此简单!

针对这些模块&#xff0c;我们编写了9个实验做成了《itop-3568开发板驱动实验手册》&#xff0c;从实验原理、硬件连接、原理图分析、实验平台、实验步骤一步一步教大家如果配置使用这些模块。 后续《itop-3568开发板驱动实验手册》中的实验也会全部录制成视频教程&#xff01;…

【Redis技术探索】「底层架构原理」帮你从底层彻底吃透RDB技术原理(入门第一步)

每日一句 低头是一种能力&#xff0c;它不是自卑&#xff0c;也不是怯弱&#xff0c;它是清醒中的嬗变。有时&#xff0c;稍微低一下头&#xff0c;或者我们的人生路会更精彩。 前提概要 Redis是一个的键-值&#xff08;K-V&#xff09;对的内存数据库服务&#xff0c;通常包含…

读取csv格式的数据--Pandas

1. 函数功能 读取逗号分隔数据的文件comma-separated values (csv) 2. 函数语法 pandas.read_csv(filepath_or_buffer, *, sep_NoDefault.no_default, delimiterNone, headerinfer, names_NoDefault.no_default, index_colNone, usecolsNone, squeezeNone, prefix_NoDefau…

氢燃料电池汽车的前景、主要优势及发展难点

氢燃料电池汽车的前景 氢燃料电池&#xff08;电动&#xff09;汽车的关键所在和奥秘之处&#xff0c;在于它的动力来源—氢燃料电池近乎完美和非常理想的工作原理与机制&#xff0c;它名义上叫“电池”&#xff0c;而实质上是一种基于化学原理&#xff0c;将作为“燃料”&…

java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

新增套餐 准备工作&#xff1a; 套餐信息分页查询 前面已经写了好几个分页查询了&#xff0c;这里查询的关键点&#xff0c;是套餐分类名称&#xff0c;不在套餐表中&#xff0c;我们要到别的表里拿&#xff0c;然后封装进setmealDto GetMapping("/page") public R p…

二维周期光栅结构的配置

摘要 复杂光学光栅结构被广泛用于多种应用&#xff0c;如光谱仪、近眼显示系统等。利用傅里叶模态法(FMM&#xff0c;或称RCWA) VirtualLab Fusion 提供了一种用于任意光栅结构严格分析的简单方法。利用图形用户界面&#xff0c;用户可以设置堆栈的几何形状&#xff0c;从而产生…

【实战】一次简单的log4j漏洞测试

更新时间&#xff1a;2021.12.19 参考文档&#xff1a;https://www.yuque.com/u8021480/crow/dg9xax 在去年log4j漏洞刚爆发的时候&#xff0c;很多平台都存在漏洞&#xff0c;当时也在第一时间在有授权的情况下对某论坛进行了渗透测试&#xff0c;结果发现存在漏洞&#xff0…

gitlabjenkins

使用容器安装gitlab 1.添加容器 docker run --detach \ --hostname 192.168.44.103 \ --publish 443:443 --publish 80:80 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab:Z \ --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ …