使用stm32f103rb usart1,怎么样软件产生一个usart

& & 4.AD以DMA方式采集四路,每路DMA深度为28级,并,说明滤波原理。
& & 总结:
& & 第一个任务:ADC以中断方式采集一路ADC,通过配置ADC_InitStructure结构体中的ADC_SConvMode,它规定模数转换工作在扫描模式(多通道)还是单次模式(单通道),
& & ADC_InitStructure.ADC_ScanConvMode=DBLE,为单通道单次模式。
& & ADC_ContinuousConvMode,定转换是连续还是单次,ADC_ContinuousConvMode=DISABLE 为单次,ADC_NbrOfChangnel规定ADC规则转换的通道数。ADC_NbrOfChannel=1;//开启1个通道数。
& & ADC_RegularChannelConfig(ADC1,ADC_Channel_13, 1,ADC_SampleTime_55Cycles5);设置指定规则组的通道的采样顺序和转换时间。这里以为只有一路通道,采用的是PC3引脚,对应的通道数是13通道,采样顺序也就是1,。
& & ADC_Cmd(ADC1,ENABLE);使能ADC
& & ADC_ITConfig(ADC1, ADC_IT_EOC,ENABLE);开启ADC转换结束中断。
& & ADC_ResetCalibration(ADC1);//重置校验寄存器
& & while(ADC_GetResetCalibrationStatus(ADC1)); //等待重置校验成功
& & ADC_StartCalibration(ADC1);//开始ADC校验
& & while(ADC_GetCalibrationStatus(ADC1));//等待ADC校验好
& & ADC_twareStartConvCmd(ADC1, ENABLE);//软件触发开始转换
& & 因为ADC有一个16位的规则组数据寄存器(ADC_DR),采用一路转换时可以不用通过DMA传输。这里就没有配置DMA。
& & void ADC_Handler(void)
& & ADonvertedValue=ADC_GetConversionValue(ADC1);
& & ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
& & 当一次转换结束,产生中断,在中断函数里,读取ADC_DR寄存器中的值,一定清除中断标志位。
& & 采集出来的数据是16进制数,要经过处理,变成10进制数,具体如下:
& & (value*100/4096)*33,value是从寄存器读出来的十六进制的数据,经过此变换后就变成10进制数,是个整数,我们通过串口显示的时候要把小树部分也要显示出来则有:((value*100/00,整数部分。
& & ((value*100/00/100,((value*100/0/10),小数部分,
& & 串口配置,我是通过STM32上的串口1与PC机通讯的,具体配置如下:
& & void USART_Configuration(void)
& & USART_InitTypeDef USART_InitS
& & USART_InitStructure.USART_BaudRate=9600;波特率9600
& & USART_InitStructure.USART_WordLength=USART_WordLength_8b;//8位数据位
& & USART_InitStructure.USART_StopBits=USART_StopBits_1;1个停止位
& & USART_InitStructure.USART_Parity=USART_Parity_No;无奇偶校验
& & USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
& & USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_N
& & USART_Init(USART1,&USART_InitStructure);初始化串口配置
& & USART_Cmd(USART1,ENABLE);使能串口
& & int utc(int ch,FILE *f)
& & USART_SendData(USART1, (u8)ch);
& & while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)//检查发送是否完成
& & }此函数,是把printf输出函数定向到USART。
& & 第一个任务大概就是这个过程,在后面的任务有相同之处,就不重复叙述了。
& & 第二个任务:ADC以中断方式连续采集四路。
& & 首先配置4路模拟输入,我配置的是PC0、PC1、PC2、PC3四个IO口,输入方式为模拟输入,速度采用2M,它们对应的ADC通道分别是10、11、12、13通道。
& & 在第一个任务说了,ADC规则转换多路采样时,ADC的数据寄存器只有一个16位寄存器,所以必须采用DMA来传输数据,DMA配置如下:
& & DMA_InitStructure.DMA_PeripheralBaseAddr=DR_ADDRESS; //DMA对应的外设基地址
& & DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&B //内存存储基地址,定义的一个数组
& & DMA_InitStructure.DMA_DIR=DMA_DIR_P //DMA转换模式为SRC模式,由外设搬移到内存
& & DMA_InitStructure.DMA_BufferSize=4; // DMA缓存大小,4个(设置DMA在传输时缓冲区的长度)
& & DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_D //接收一次数据后,设备地址禁止后移(设置DMA的外设递增模式)
& & DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_E //关闭接收一次数据后,目标内存地址后移(设置DMA的内存递增模式)
& & DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfW//定义外设数据长度
& & DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfW
& & DMA_InitStructure.DMA_Mode=DMA_Mode_C
& & //循环模式开启,Buf写满后,自动回到初始地址开始传输
& & DMA_InitStructure.DMA_Priority=DMA_Priority_H//优先级高
& & DMA_InitStructure.DMA_M2M=DMA_M2M_D
& & ADC配置:
& & //ADC配置
& & ADC_InitStructure.ADC_Mode=ADC_Mode_I//独立转换模式
& & ADC_InitStructure.ADC_ScanConvMode=ENABLE;//开启扫描模式
& & ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//开启连续转换模式
& & ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_N//ADC外部开关,关闭状态
& & ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_R//对齐方式,右对齐方式
& & ADC_InitStructure.ADC_NbrOfChannel=4;//开启通道数,4个
& & ADC_Init(ADC1,&ADC_InitStructure);//初始化ADC
& & ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_55Cycles5);
& & ADC_RegularChannelConfig(ADC1,ADC_Channel_11,2,ADC_SampleTime_55Cycles5);
& & ADC_RegularChannelConfig(ADC1, ADC_Channel_12,3,ADC_SampleTime_55Cycles5);
& & ADC_RegularChannelConfig(ADC1,ADC_Channel_13,4,ADC_SampleTime_55Cycles5);;
& & //ADC通道组,第10、11、12、13个通道,采样顺序分别是1,2,3,4转换时间55.5个
& & ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
& & ADC_Cmd(ADC1, ENABLE);//打开ADC1
& & ADC_ResetCalibration(ADC1);//重置ADC1校准寄存器
& & while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
& & ADC_StartCalibration(ADC1);//开始ADC1校准
& & while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
& & ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能ADC1软件开始转换
& & 中断是采用DMA中断,当DMA第一轮传输结束时,设一个标志位,当标志位为1时,表明第一轮转化和传输完成,此时就可以读取数组中的数据,经过处理就可以通过串口显示出来。
& & void DMAChannel1_IRQHandler(void)
& & ADC_DMA_OK=1;
& & DMA_ClearITPendingBit(DMA1_IT_TC1);
& & }中断函数。
& & 第二个任务大概就这样子
& & 第三个任务:AD以DMA方式采集一路,DMA深度为一级。
& & 这个任务不难,关键要理解到DMA深度,用自己的语言来理解哈DMA深度吧,当ADC以一路采集时,ADC转换完成就自动把转换结果通过DMA传给目的地址,如果传输一次结束DMA就产生中断的话,DMA的深度就为一级,如果连续传输N次,DMA的深度就位N级,当然这个N是又范围的,因为受目的地址的内存大小控制和数据宽度,这个大家应该豆明白的。
& & 这个任务在第一个任务的基础上我通过DMA传输,意思是AD配置没什么区别。DMA配置和第二个任务的区别就是DMA_BufferSize的宽度不同。
& & #define DR_ADDRESS (u32)0x4001244c ADC的地址
& & #define DMA_Count 1 DMA深度,也就是连续传输的次数
& & #define ADC_Channle 1 ADC通道
& & 数据处理和串口通讯这里不重复叙述。DMA中断和任务二的类似。
& & 第四个任务:AD以DMA方式采集四路,每路DMA深度为128级,并滤波,说明滤波原理。
& & 这个任务和是个综合性任务,只要弄懂前面三个任务,难点是再如何滤波,开始的时候我也不知道怎么滤波,同事提醒我才知道怎么滤波的,我大概说哈我的理解,把四路通道采集的数据分别放到四个数组中,然后给他来个排序,降序,升序都行,把首位两个数丢掉,然后加起来求。但是我这里因为DMA的深度为128级,也就是四个通道分别采样了128次,大家都知道,数据越多,求平均值就越准确,所以我就没有采用什么排序法了,直接给他们分别求平均值,具体如下:
& & #define DR_ADDRESS (u32)0x4001244c ADC的地址
& & #define DMA_Count 128 DMA深度,也就是连续传输的次数
& & #define ADC_Channle 4 ADC通道
& & for(i=0;i&(ADC_Channle*DMA_Count);i+=4)
& & Value1[j]=Buf[i+0];
& & Sum1+=Value1[j];
& & Value2[j]=Buf[i+1];
& & Sum2+=Value2[j];
& & Value3[j]=Buf[i+2];
& & Sum3+=Value3[j];
& & Value4[j]=Buf[i+3];
& & Sum4+=Value4[j];
& & Valu1=Sum1/DMA_C
& & Valu2=Sum2/DMA_C
& & Valu3=Sum3/DMA_C
& & Valu4=Sum4/DMA_C
& & Delay(100000);
& & printf("rn当前AD_0值:0x%x,值:%d.%d%dVnr",
& & Valu1,((Valu1*100/00,((Valu1*100/00/100,((Valu1*100/0/10);
& & Delay(100000);
& & printf("rn当前AD_1值:0x%x,电压值:%d.%d%dVnr",
& & Valu2,((Valu2*100/00,((Valu2*100/00/100,((Valu2*100/0/10);
& & Delay(100000);
& & printf("rn当前AD_2值:0x%x,电压值:%d.%d%dVnr",
& & Valu3,((Valu3*100/00,((Valu3*100/00/100,((Valu3*100/0/10);
& & Delay(100000);
& & printf("rn当前AD_3值:0x%x,电压值:%d.%d%dVnr",
& & Valu4,((Valu4*100/00,((Valu4*100/00/100,((Valu4*100/0/10);
& & Delay(100000);
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670&USART_STM32f103 学习 如何与上位机 进行串口传输数据,里面提供了整个工程文件 ARM-PowerPC-ColdFire-MIPS 微处理器开发 238万源代码下载-
&文件名称: USART_STM32f103
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 1007 KB
&&上传时间:
&&下载次数: 68
&&提 供 者:
&详细说明:学习STM32f103如何与上位机如何进行串口传输数据,里面提供了整个工程文件-Learn how STM32f103 how PC serial port to transfer data, which provides the entire project file
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&USART简单\globals.h&&.........\include.h&&.........\main.c&&.........\main.h&&.........\MyStdlib.c&&.........\MyStdlib.h&&.........\myuse.h&&.........\platform_config.h&&.........\RAM.ini&&.........\readme.txt&&.........\stm32f10x_it.c&&.........\stm32f10x_conf.h&&.........\stm32f10x_vector.s&&.........\stm32f10x_it.h&&.........\timer.c&&.........\timer.h&&.........\usart\Com.c&&.........\.....\COM.H&&.........\.....\Retarget.c&&.........\Obj\ExtDll.iex&&.........\...\STM32.fed&&.........\...\STM32.hex&&.........\...\STM32.htm&&.........\...\STM32.plg&&.........\...\stm32f10x_it.d&&.........\...\stm32f10x_it.o&&.........\...\main.d&&.........\...\main.o&&.........\...\STM32.axf&&.........\...\timer.d&&.........\...\timer.o&&.........\...\mystdlib.d&&.........\...\mystdlib.o&&.........\...\com.d&&.........\...\com.o&&.........\...\retarget.d&&.........\...\retarget.o&&.........\...\stm32f10x_vector.o&&.........\...\STM32.tra&&.........\...\STM32.lnp&&.........\...\stm32f10x_it.crf&&.........\...\main.crf&&.........\...\timer.crf&&.........\...\mystdlib.crf&&.........\...\com.crf&&.........\...\retarget.crf&&.........\...\stm32f10x_lib.d&&.........\...\stm32f10x_lib.crf&&.........\...\stm32f10x_lib.o&&.........\...\stm32f10x_usart.d&&.........\...\stm32f10x_usart.crf&&.........\...\stm32f10x_usart.o&&.........\...\stm32f10x_gpio.d&&.........\...\stm32f10x_gpio.crf&&.........\...\stm32f10x_flash.d&&.........\...\stm32f10x_flash.crf&&.........\...\stm32f10x_flash.o&&.........\...\stm32f10x_systick.d&&.........\...\stm32f10x_systick.crf&&.........\...\stm32f10x_systick.o&&.........\...\stm32f10x_rcc.d&&.........\...\stm32f10x_rcc.crf&&.........\...\stm32f10x_rcc.o&&.........\...\stm32f10x_nvic.d&&.........\...\stm32f10x_nvic.crf&&.........\...\stm32f10x_nvic.o&&.........\...\cortexm3_macro.o&&.........\...\STM32_sct.Bak&&.........\...\STM32.sct&&.........\...\stm32f10x_gpio.o&&.........\Lst\STM32.map&&.........\...\STM3210B-EVAL.map&&.........\...\stm32f10x_vector.lst&&.........\Project_FLASH.dep&&.........\Project.Uv2.bak&&.........\Sourse_Insight\Easy_Comm.IMB&&.........\..............\Easy_Comm.IMD&&.........\..............\Easy_Comm.IAB&&.........\..............\Easy_Comm.IAD&&.........\..............\Easy_Comm.PR&&.........\..............\Easy_Comm.PS&&.........\..............\Easy_Comm.PFI&&.........\..............\Easy_Comm.PO&&.........\..............\Easy_Comm.PRI&&.........\..............\Easy_Comm.WK3&&.........\Project_RAM.dep&&.........\Project_uvproj.bak&&.........\Project_uvopt.bak&&.........\Project_Simulator.dep&&.........\JLinkLog.txt&&.........\Project.uvproj&&.........\Project.uvopt&&.........\usart&&.........\Obj&&.........\Lst&&.........\Sourse_Insight&&USART简单
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 串口通信上位机程序,实现上下位机通信,上位机显示波形
&[] - 新华龙编程软件打开,单片机F020对18B20进行读写,并将温度通过串口送给上位机。程序通过高度可直接用。
&[] - stm32 编程学习篇之 串口通信,有详细的注释
&[] - 用VC++编写的下位机与上位机通过RS232通信实现的界面及数据管理系统。
&[] - 一个基于上位机和单片机的LED控制系统源代码。。
&[] - 上位机采用VC6.0编写TCP/IP客户端应用程序,接收到下位机(ARM嵌入式板)采集到的温度数据,并采用ADO数据库把数据存储起来。本科毕设,程序是可用的。
&[] - ST公司的STM32f103R8T6的串口通信程序
&[] - 基于STM32f103的点阵屏控制器控制程序。
&[] - 基于STM32、UCOS的温度传感器18B20的驱动程序。支持ROM搜索算法。
&[] - 神舟IV开发板UCOSIII+UCGUI3.98usart1 AMR_stm32f103的串口程序,利用中断方式进行接收。希望对大家有用。 ARM-PowerPC-ColdFire-MIPS 微处理器开发 238万源代码下载-
&文件名称: usart1
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 2518 KB
&&上传时间:
&&下载次数: 384
&&提 供 者:
&详细说明:AMR_stm32f103的串口程序,利用中断方式进行接收。希望对大家有用。-AMR_stm32f103 serial programs, using the interrupt mode to receive. Want to be useful to everyone.
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&usart1\core_cm3.crf&&......\core_cm3.d&&......\core_cm3.o&&......\core_cm3.__i&&......\Desktop_1.ini&&......\Desktop_2.ini&&......\init.crf&&......\init.d&&......\init.o&&......\init.__i&&......\main.crf&&......\main.d&&......\main.o&&......\main.__i&&......\misc.crf&&......\misc.d&&......\misc.o&&......\StartUp\Desktop_1.ini&&......\.......\Desktop_2.ini&&......\.......\startup_stm32f10x_hd.s&&......\.......\startup_stm32f10x_ld.s&&......\.......\startup_stm32f10x_md.s&&......\startup_stm32f10x_hd.lst&&......\startup_stm32f10x_hd.o&&......\STM32F10x.s&&......\stm32f10x_adc.crf&&......\stm32f10x_adc.d&&......\stm32f10x_adc.o&&......\stm32f10x_bkp.crf&&......\stm32f10x_bkp.d&&......\stm32f10x_bkp.o&&......\stm32f10x_can.crf&&......\stm32f10x_can.d&&......\stm32f10x_can.o&&......\stm32f10x_crc.crf&&......\stm32f10x_crc.d&&......\stm32f10x_crc.o&&......\stm32f10x_dac.crf&&......\stm32f10x_dac.d&&......\stm32f10x_dac.o&&......\stm32f10x_dbgmcu.crf&&......\stm32f10x_dbgmcu.d&&......\stm32f10x_dbgmcu.o&&......\stm32f10x_dma.crf&&......\stm32f10x_dma.d&&......\stm32f10x_dma.o&&......\stm32f10x_exti.crf&&......\stm32f10x_exti.d&&......\stm32f10x_exti.o&&......\stm32f10x_flash.crf&&......\stm32f10x_flash.d&&......\stm32f10x_flash.o&&......\stm32f10x_fsmc.crf&&......\stm32f10x_fsmc.d&&......\stm32f10x_fsmc.o&&......\stm32f10x_gpio.crf&&......\stm32f10x_gpio.d&&......\stm32f10x_gpio.o&&......\stm32f10x_i2c.crf&&......\stm32f10x_i2c.d&&......\stm32f10x_i2c.o&&......\stm32f10x_iwdg.crf&&......\stm32f10x_iwdg.d&&......\stm32f10x_iwdg.o&&......\stm32f10x_pwr.crf&&......\stm32f10x_pwr.d&&......\stm32f10x_pwr.o&&......\stm32f10x_rcc.crf&&......\stm32f10x_rcc.d&&......\stm32f10x_rcc.o&&......\stm32f10x_rtc.crf&&......\stm32f10x_rtc.d&&......\stm32f10x_rtc.o&&......\stm32f10x_sdio.crf&&......\stm32f10x_sdio.d&&......\stm32f10x_sdio.o&&......\stm32f10x_spi.crf&&......\stm32f10x_spi.d&&......\stm32f10x_spi.o&&......\stm32f10x_tim.crf&&......\stm32f10x_tim.d&&......\stm32f10x_tim.o&&......\stm32f10x_usart.crf&&......\stm32f10x_usart.d&&......\stm32f10x_usart.o&&......\stm32f10x_wwdg.crf&&......\stm32f10x_wwdg.d&&......\stm32f10x_wwdg.o&&......\STM32Lib\core_cm3.c&&......\........\core_cm3.h&&......\........\Desktop_1.ini&&......\........\Desktop_2.ini&&......\........\misc.c&&......\........\misc.h&&......\........\stm32f10x.h&&......\........\stm32f10x_adc.c&&......\........\stm32f10x_adc.h&&......\........\stm32f10x_bkp.c&&......\........\stm32f10x_bkp.h&&......\........\stm32f10x_can.c
&[]:不能解压或下载失败&[]:很好,推荐下载
&近期下载过的用户:
&&&&&&&&&&&&&&&&&[]
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 基于Cortex-M3核的ucosⅡ/ucos在STM32103上完整的移植代码和规范的工程模板
&[] - STM32F103开发板上用的程序,用USART和计算机通讯。
&[] - * 本文件实现串口发送功能(通过重构putchar函数,调用printf;或者USART_SendData()
* 这里是一个用串口实现大量数据传输的例子,使用了DMA模块进行内存到USART的传输
每当USART的发送缓冲区空时,USART模块产生一个DMA事件,
此时DMA模块响应该事件,
&[] - stm32f103单片机的实时时钟编程
&[] - stm32f103的一个简单的ad测试程序,包含串口
&[] - STM32F10xxx+参考手册Rev7V3,它全面的介绍了,STM32F10系列嵌入式单片机怎样使用,是一个难得一见的好书,愿和大家一起分享。
&[] - STM UART串口发送接收字符串程序,及简单的串口数据解码}

我要回帖

更多关于 stm32f103 usart1 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信