|
STM8L 串口接收不定长数据(中断) STM8L是一款低价位的低功耗8位处理器。 串口部分接收不定长数据,不确定结束符的处理办法,采用idle中断的方式来处理,增加了效率。 void USART_Config(void) { /*USART configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - Odd parity - Receive and transmit enabled - USART Clock disabled */ GPIO_Init(GPIOC,GPIO_Pin_2,GPIO_Mode_In_PU_No_IT); GPIO_Init(GPIOC,GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Fast); STM_EVAL_COMInit(COM1, (uint32_t)9600, USART_WordLength_8b,USART_StopBits_1, USART_Parity_No,(USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx)); /*Enable general interrupts */ USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE); USART_ITConfig(EVAL_COM1, USART_IT_IDLE, ENABLE); /*Enable USART */ USART_Cmd(EVAL_COM1, ENABLE); } 中断处理: typedef struct { __IO char buf[RX_LENGTH]; __IO char length; }Rx_Data_Type; Rx_Data_Type Rx_Data; #define RX_LENGTH 64 INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler,28) { chartemp = 0; if(Rx_Data.length>= RX_LENGTH ) { Rx_Data.length= 0; } Rx_Data.buf[Rx_Data.length ] =(USART_ReceiveData8(EVAL_COM1) ); Rx_Data.length ++; temp =EVAL_COM1->SR; if (temp & 0x0F) { Rx_Data.length = 0; return; } if (temp & 0x10) //idle { Rx_Flag = 1; } } 主函数: Main(void) { USART_Config(); enableInterrupts(); while(1) { if(Rx_Flag) { Rx_Flag = 0; Rx_Data.length = 0; Deal_RxUart(); } } } |
| 一点心得,分享一下。 |
![]() 谢谢分享 |
| 谢谢分享 |
STM8 的MCU有四个供电单元
【STM8-SO8】08-STM8L001J3的点灯
STM8单片机如何实现Bootloader
基于STM8的DALI (数字可寻址调光协议)
开源基于STM32的STM8脱机编程器
【ST MCU实战经验】之STM8中UART奇偶校验的使用方法
【思修电子STM8集合贴】龙顺宇STM8理论/实战视频/书籍/软件/
初次尝试STM8S001J3
分享STM8 风驰光盘的资料,是完整的(包括原理图+例程+PDF注释)
基于STM8的实验代码汇总分享
微信公众号
手机版