历史上的今天
今天是:2024年11月26日(星期二)
2019年11月26日 | STM8S103之串口中断接收
2019-11-26 来源:eefocus
本文以STM8S103F3P6编程为例,介绍STM8S103F3P6串口中断接收。
电脑平台:Windows7 64位旗舰
编译软件:IAR
硬件平台:STM8S103F3P6
1.系统时钟初始化为内部16M
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //时钟 初始化时钟为1分频 16M 2分频8M
2.初始化串口
UART1_DeInit();
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);
UART1_Cmd(ENABLE);
enableInterrupts();
3.编写主函数
void main(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
Init_UART1();
enableInterrupts();
/* Infinite loop */
while (1)
{
if(flagpacker)
{
flagpacker = 0;
for(unsigned char num = 0; num < length;num++)
Send(Rxpacker[num]);
}
}
}
4.编写中断服务函数
unsigned char flagpacker; //全局变量 是否完整接收一个数据包
unsigned char Rxpacker[255]; //全局变量 完整数据包
unsigned char length; //数据长度
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
unsigned char RxBuf; //临时接收
static unsigned char RxData[255];//接收数据缓存区
static unsigned char count; //串口接收数据长度
static unsigned char rec; // 判断是否正在接收数据
UART1_ClearITPendingBit(UART1_IT_RXNE);
RxBuf = UART1_ReceiveData8();
if(RxBuf == (0xcc)) //帧头
{
rec= 1;
count = 0;
flagpacker = 0;
return ;
}
if(RxBuf == (0xcd)) //帧尾
{
rec= 0;
//此处可以添加校验码
length = count;
for(unsigned char i = 0; i Rxpacker[i] =RxData[i]; } flagpacker = 1;//告诉系统已接收一个完整的数据包 return ; } if(rec) //判断是否处于接收状态 { RxData[count++] = RxBuf; } }
下一篇:STM8S IO口基本输入输出
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:16 编辑 鉴于竞赛在即,c8051f网络为了更好的服务于参赛选手,特别推出器件促销活动如下: 1,活动期间凡购买C8051f单片机仿真器或c8051f330学习板: 送: USB延长线(1条) 赠品详见:http://www.c80 ...… 查看全部问答> |
|
为什么用Writefile对某ENDPOINT写数据正常,而用DeviceIOControl蓝屏 1.驱动程序写Write函数,指定固定断点endpoint0,submitURB 在应用程序调用writefile 写数据正常 2.驱动程序定义IOCTLCODE,写函数BULKWrite,获取pipenum,得到endpoint0,然后submitURB 在应用程序指定endpoint0,调用DeviceIOControl 蓝屏, 显 ...… 查看全部问答> |
|
我原来是搞VC开发的,现在因为公司需要,改搞VxWorks。但是公司没有人懂VxWorks。我原来也搞过一些单片机的开发。对VxWorks也是一知半解。 现在要做项目,不知道如何下手。现在向各位大牛们请教,如何做VxWorks开发,能提供网站、Domo、软件均可。 ...… 查看全部问答> |
|
我现在已经做出来了串口可以接收一个字符,但是字符串就是不对,哪位可以给指点一下? 就是在serial windows #1输入个字符串,进入相应的执行程序,现在就是输入一个字符成功,改成字符串时无法输入,不知道是什么原因. … 查看全部问答> |
|
我想用WINCE系统里的BP_LowLevelFormat函数,查了下MSDN,http://msdn2.microsoft.com/en-us/library/aa917050.aspx 上面说要加bootpart.h头文件和这个LIB:Bootpart.lib 我把这个LIB加进了project->seting->link,而且也把相应的文件放到相应的C ...… 查看全部问答> |
|
在WINDOW自带的驱动,通过本地连接的属性->高级选项里有(Link speed/duplex mode),上面可以通过右边的下拉菜单来选择网卡的速度(10M/100M),和双工(全双工和半双工),那我如果修改他成为我自己定义的速度, 比如88Mbps呢? 是不是要修改.inf文件,还是在 ...… 查看全部问答> |
|
真诚请教大家:大家现在进行嵌入式开发,用的那些芯片?希望大家能多说一点项目里用到的芯片,楼主诚心请教,并且肯定放分! 我看得大部分材料说的都是51的片子,如果直接去学arm,没有项目的支持学起来很费劲。 所以想咨询一下大家。… 查看全部问答> |




