中级会员
- 积分
- 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]
|
|