| 
 
中级会员  
 
	积分317金钱317 注册时间2016-11-1在线时间64 小时 | 
 
 发表于 2017-3-21 17:41:04
|
显示全部楼层 
| 本帖最后由 fankai 于 2017-3-22 12:44 编辑 
 我这里用的是stm8152k4,接收字符串,在发送回来,没问题[mw_shl_code=c,true]u8 receive_data[50];
 u8 receive_data_num = 0;        //接收字节数,以0x0d,0x0a结束
 u8 end_flag = 0;
 
 /*
 名称:usart_init
 功能:初始化串口
 输入:无
 输出:无
 */
 void usart_init()
 {
 
 //打开时钟
 CLK_PeripheralClockConfig(CLK_Peripheral_USART1,ENABLE);
 //初始化参数,115200N81
 USART_Init(USART1,115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx|USART_Mode_Rx);
 //使能接收中断
 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
 //打开串口
 USART_Cmd(USART1, ENABLE);
 enableInterrupts();
 }
 
 //中断配置函数
 INTERRUPT_HANDLER(USART1_RX_TIM5_CC_IRQHandler,28)
 {
 if(USART_GetITStatus(USART1, USART_IT_RXNE))                         //判断中断标志
 {
 USART_ClearITPendingBit(USART1, USART_IT_RXNE);                //清除标志
 if(0x00 == end_flag)                                                                //没结束
 {
 if(USART_ReceiveData8(USART1) == 0x0d)
 {
 end_flag = 0x0d;                //赋值0x0d
 }
 else
 {
 receive_data[receive_data_num] = USART_ReceiveData8(USART1);
 receive_data_num++;
 }
 }
 else if(0x0d == end_flag)                //等于0x0d的时候,再检测是否等于0x0a
 {
 if(USART_ReceiveData8(USART1) == 0x0a)
 {
 end_flag = 0x0a;                //赋值0x0a,一串数据接收完毕
 receive_data_num = 0;
 }
 else
 {
 //接收错误
 printf("数据接收错误\r\n");
 end_flag = 0x00;                //重新开始接收
 receive_data_num = 0;
 }
 }
 }
 }
 
 
 int putchar(int ch)                 //重新定义
 {
 // 将Printf内容发往串口
 USART_SendData8(USART1,(unsigned char) ch);
 while (!USART_GetFlagStatus(USART1,USART_FLAG_TXE));//如果发送未完成, //标志位未置位,则循环等待
 return (ch);
 }
 
 void main(void)
 {
 delay_init();
 //        lowpower_init();
 usart_init();
 
 while (1)
 {
 if(0x0a == end_flag)
 {
 end_flag = 0x00;
 //接收完毕
 printf("%s\r\n",receive_data);
 LED_ON;
 delay_ms(10);
 LED_OFF;
 
 }
 }
 
 }
 [/mw_shl_code]
 
 
 | 
 |