STM8单片机实现蓝牙串口通信系统的设计_第1页
STM8单片机实现蓝牙串口通信系统的设计_第2页
STM8单片机实现蓝牙串口通信系统的设计_第3页
STM8单片机实现蓝牙串口通信系统的设计_第4页
STM8单片机实现蓝牙串口通信系统的设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM8单片机实现蓝牙串口通信系统的设计最近在淘宝逛的时候发现了一款单片机,STM8。相比之前一直使用的也是8位的AVR相比,感觉STM8更为强大,芯片特点如下:内核:具有3级流水线的哈佛结构、扩展指令集程序存储器:8K字节Flash;RAM:1K字节数据存储器:640字节真正的数据EEPROM;可达30万次擦写更重要的一点就是STM8系列若使用库编程的话,可以方便的不同芯片的程序移植。甚至可以方便的移植到STM32上面,大大减轻了更新硬件的重写程序的工作量。ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。(简述和图片均来之百度百科)本文适合STM8控制ADC0832,程序是使用库编程,编译工具IAR。其实STM8也自带ADC转换模块了。..。..本程序还包括蓝牙串口通信,方便将得到数据从串口输出,我是编写了安卓上位机的app,方便在安卓上面显示图像。程序还是用了定时器TIM4,确保每次采样的间隔大致相等,对之后的数据处理提供了基础。先介绍核心mian.c文件,主要功能是初始化串口UART1,定时器TIMER4,还有一个发送16进制的函数。其中发送完数据再发送一个字符’U’作为一个数据的结束(你也可以自己定义)。这里说说为什么要选用16进制,而不是10进制,STM8速度有限,为了减少单指令操作,程序用了移位操作,这样可得到16进制每位数值,在发送到安卓上位机,上位机运算速度快,再转化成10进制,这样可以资源合理分配。main.c程序:#include“stm8s.h”#include“stm8s_it.h”uint8_tHexTable[]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};uint8_ti=0;//串口UART1初始化voidInit_UART(void){//默认初始化UART1_DeInit();//设置波特率96008位数据1位停止位无校验外部时钟不可用模式接收发送UART1_Init((u32)9600,UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);//设置接收寄存器溢出中断UART1_ITConfig(UART1_IT_RXNE_OR,ENABLE);}//定时器TIM4初始化voidInit_Timer4(void){//1ms中断一次TIM4_TimeBaseInit(TIM4_PRESCALER_128,124);/*ClearTIM4updateflag*/TIM4_ClearFlag(TIM4_FLAG_UPDATE);/*Enableupdateinterrupt*/TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);TIM4_Cmd(ENABLE);}//发送字节voidSend(uint8_tdat){//检查并等待发送寄存器是否为空while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));//发送字节UART1_SendData8(dat);}//发送16位16进制voidUART1_mysend16hex(u16dat){Send(HexTable[(dat》》12)&0x0f]);Send(HexTable[(dat》》8)&0x0f]);Send(HexTable[(dat》》4)&0x0f]);Send(HexTable[(dat)&0x0f]);}//发送8位16进制voidUART1_mysend8hex(uint8_tdat){Send(HexTable[(dat》》4)&0x0f]);Send(HexTable[(dat)&0x0f]);Send(‘U’);}voidmain(){//初始化Init_UART();Init_Timer4();//中断开启enableInterrupts();while(1){}}//这个必须加上不然会报错估计是库的要求#ifdefUSE_FULL_ASSERTvoidassert_failed(u8*file,u32line){while(1){}}#endif接下来说说中断函数表stm8s_it.c其中只要选用两个中断函数就可以了:INTERRUPT_HANDLER(UART1_RX_IRQHandler,18)接收寄存器溢出中断里面添加安卓上位机发送过来的数据的处理程序,我这里写的是ADC0832通道选择的判断。INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler,23)定时器4计数器溢出中断里面添加初始化ADC0832和ADC0832数据读取并UART1发送到安卓上位机。stm8s_it.c程序:#include“stm8s_it.h”#include“ADC0832.h”externuint8_ti;uint8_tchannel=1;//接收寄存器溢出中断INTERRUPT_HANDLER(UART1_RX_IRQHandler,18){/*Inordertodetectunexpectedeventsduringdevelopment,itisrecommendedtosetabreakpointonthefollowinginstruction.*///下面是我做的安卓上位机发送过来的数据判断,这里可以改成自己想要的程序uint8_ttempData;tempData=UART1_ReceiveData8();if(tempData==‘A’){channel=0;}if(tempData==‘Z’){channel=1;}//清除UART1中断标识符UART1_ClearITPendingBit(UART1_IT_RXNE);}//定时器4计数器溢出中断INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler,23){/*Inordertodetectunexpectedeventsduringdevelopment,itisrecommendedtosetabreakpointonthefollowinginstruction.*///1*10m执行一次i++;if(i==10){//进行ADC数模转换//初始化ADC芯片,写入通道AD_init(channel);u8u8_adc1_value;//进行数据读出u8_adc1_value=AD_read();//发送8位数据UART1_mysend8hex(u8_adc1_value);//清除UART1中断标识符UART1_ClearITPendingBit(UART1_IT_RXNE);i=0;}TIM4_ClearITPendingBit(TIM4_IT_UPDATE);}这里说说ADC0832的操作函数:ADC0832.c程序包括初始化STM8的GPIO,初始化ADC0832和读取ADC0832数据主要是DODI端口复用的问题,由于STM8端口作为输入输出,需要重新初始化GPIO,所以比一般51单片机的程序要复杂一点。最后读取数据先是从高位读出,再低位读出,进行校验,相同数值再输出。附上时序图ADC0832.c程序:/**********************************************程序名称:ADC0832子程序作者:devinzhang91时间:2014.10.04**********************************************/#ifndefADC0832_H#defineADC0832_H#include“stm8s.h”//端口设置#defineCLK_GPIO_PORT(GPIOC)#defineCLK_GPIO_PINS(GPIO_PIN_3)#defineDI_GPIO_PORT(GPIOC)#defineDI_GPIO_PINS(GP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论