此处附上接收中断源码
#ifdef _RAISONANCE_
void USART_RX_IRQHandler(void) interrupt 28
#endif
uint8_t cnt_USART ;
#ifdef _IAR_SYSTEMS_
#pragma vector=30
__interrupt void USART_RX_IRQHandler(void)
#endif
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
USART_ClearITPendingBit ();//清中断标志
if(!USART_GetFlagStatus (USART_FLAG_RXNE))//等待接收完毕
{
p_rxbuf[cnt_USART++] = USART_ReceiveData8(); //接收数据
if(cnt_USART == 0x0B)
cnt_USART = 0xFF ;
}
// USART_RendCmd(p_rxbuf); //接收11bytes串口指令
}
cnt_USART 为全局变量,因为每次接收每次只是接收1byte,因此,在主程序应该进行适当的延时来等待缓冲区的数据被读取。
while(cnt_USART!=0xFF)
{
if(mark_1ms >100)
break;
}
在函数进行适当的延时进行等待,mark_1ms 此处是使用TIM2进行延时,也可以在主函数中进行空函数延时。
关键字:STM8 串口接收 字符串
引用地址:
STM8 串口接收字符串问题
推荐阅读最新更新时间:2024-11-02 09:06
STM8学习笔记——PWM模块
首先将管脚配置为推挽输出。下面以向上计数模式为例来讲述PWM产生的原理:TIMx开始向上计数,TIMx_CNT为计数值,计数一次加1,TIMx_ARR确定了计数的上限,达到上限后计数器从0开始重新计数,所以一次PWM频率就由TIMx_ARR来确定了,即计数器时钟*(TIMx_ARR-1),频率确定了,接下来就是占空比。占空比是由TIMx_CCRx来确定的,PWM模式1下当TIMx_CNT TIMx_CCRx,输出OCiREF有效电平,TIMx_CNT =TIMx_CCRx时,输出OCiREF无效电平,至于有效电平是0还是1,要设置TIMx_CCERx,这样产生了一个PWM波形,可以说配置非常灵活,当TIMx_CCRx为0时,占
[单片机]
免费软件工具让用户通过STM8微控制器开发微型智能设备
新的Cosmic CXSTM8 C编译器让免费且无限制使用的开发工具链更完善 功能丰富的编译器工具可支持STM8全系产品,包括存储容量最高128KB的产品,对代码量不设任何限制 STM8S-DISCOVERY硬件开发工具使设计项目启动资金降至8美元 中国,2016年5月10日 横跨多重电子应用领域、全球领先的半导体供应商意法半导体 (STMicroelectronics,简称ST;纽约证券交易所代码:STM)进一步扩大其深受市场欢迎的STM8微控制器的选择范围,支持智能装置设计人员选用STM8微控制器开发方便现代工作生活的经济型计算任务。 意法半导体与Cosmic的最新合作代表包括开发、调试、优调STM
[物联网]
IAR for STM8问题1
IAR for STM8弹窗:Fatal error while generating source browse infomation.See the Source Browse Log window for more infomation 这种情况是因为.c或者.h文件的包含路径中有中文,将中文改成英文之后重新设置路径,会如下正常运行。 正常运行如下:
[单片机]
串口工作在DMA模式下有时接收异常
1 前言 客户反馈在使用STM32F205的串口工作在DMA模式时,有时能够接收数据,有时完全没有数据,但如果换成中断模式来接收又能100%正常收到数据。 2 复现现象 2.1 问题背景 与客户沟通,客户使用的是STM32F2标准库V1.1.0,串口波特率为1.408Mbps,不经过串口RS232,直接连接主CPU和从MCU(STM32F205)的串口发送和接收引脚,如下图所示: 图1 2.2 尝试重现问题 由于客户使用的是主从架构,实验采用两块STM3220G-EVAL评估板来重现现象。一块用来不间断发送串口数据,另一块采用串口DMA进行接收,直接通过杜邦线连接串口PIN脚并共地,不使用评估板上的RS232收
[单片机]
STM8 LCD602显示子程序
软件设计 /********************************************************************* 目 的: 建立LCD1602操作库 目标系统: 基于STM8单片机 应用软件: Cosmic CxSTM8 *********************************************************************/ #define PORT_busy PB_DDR=0x00;PB_CR1=0xff; #define busy PB_IDR #define PORT_OUT PB_DDR=0xff;PB_CR1=0xff; #define
[单片机]
进一步掌握STVD/COSMIC
如何分配变量到指定的地址 举例: unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00 unsigned char temp_B@0x100; //定义无符号变量temp_B,强制其地址为0x100 @tiny unsigned char temp_C; //定义无符号变量temp_C,由编译器自动在地址小于0x100的RAM中为其分配一个地址 @near unsigned char temp_D; //定义无符号变量temp_D,由编译器自动在地址大于0xFF的RAM中为其分配一个地址 另外也可以采用伪指令 pragma 将函数或者变量定义到指定的section中,例如: #
[单片机]
STM8学习笔记---串口通信中如何自己定义通信协议
在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的。好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写。今天就来说一下如何串口通信协议是如何定义出来的。 先看一段最简单的串口程序。 void Uart1_Init( unsigned int baudrate ) { unsigned int baud; baud = 16000000 / baudrate; Uart1_IO_Init(); //IO口初始化 UART1_CR1 = 0; UART1_CR2 = 0; UART1_CR3 = 0; UART1_BRR2 = ( uns
[单片机]
如何利用STM32单片机发送字符串
一、STM32有自己的字符发送函数。 void PC_SendChar(uint8_t DataToSend) { USART_SendData (USART1 ,DataToSend); while(USART_GetFlagStatus (USART1 ,USART_FLAG_TC )!=SET ); } 二、发送字符串函数是在字符发送函数的基础上编写的 void PC_SendString(uint8_t *str) { while(*str) { PC_SendChar (*str); str++; } } 三、发送字符串示例 PC_SendString((u8*) Welcome to the NDIR wo
[单片机]