OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3706|回复: 3

STM8S UART2串口接收字符串

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
发表于 2019-5-14 10:39:33 | 显示全部楼层 |阅读模式
2金钱
下面是用STM8S105K4芯片的UART2串口编写的串口发送字符串程序。用来发送字符串控制指令给蓝牙。现在遇到的问题是,我要接收保存蓝牙反馈回来的字符串,以便做下一步操作,应该怎么写接收函数??我看stm8s_uart2.c库函数里只有uint8_t UART2_ReceiveData8(void)这一个,谁有完整的接收字符串代码,发出来给参考下。不胜感激!!
/*********************************************************************************************************
    UART2串口初始化
*********************************************************************************************************/
void UartConfiguration(void)
{
  UART2_DeInit();
  UART2_Init(       //UART2 configuration
             (u32)115200,      //BaudRate = 115200 baud  115200 波特率115200
             UART2_WORDLENGTH_8D,   //Word Length = 8 Bits 字长8位
             UART2_STOPBITS_1,    //One Stop Bit 1位停止位
             UART2_PARITY_NO,    //No parity 无奇偶校验
             UART2_SYNCMODE_CLOCK_DISABLE, //UART2 Clock disabled 禁用UART2串口时钟
             UART2_MODE_TXRX_ENABLE  //Receive and transmit enabled 使能发送接收
            );

  UART2_Cmd(ENABLE); //启用串口
  UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE);  //同意接收中断

}

/*********************************************************************************************************
    UART2串口发送一个字符
*********************************************************************************************************/
void UART2_SendChar(unsigned char c)
{
        while((UART2_GetFlagStatus(UART2_FLAG_TXE)==RESET)); //检测发送数据寄存器是否为空,UART1_FLAG_TXE代表发送寄存器为空
        UART2->DR = c;  //发送一个字符
        while((UART2_GetFlagStatus(UART2_FLAG_TC)==RESET));  //检测发送是否完成,UART1_FLAG_TC代表发送完成标志
}


/*********************************************************************************************************
    UART2串口发送字符串指令
*********************************************************************************************************/
void UART2_SendCommand(unsigned char *s)
{
        while (*s != '\0')  // \0 表示字符串结束标志,通过检测是否字符串末尾
        {
                UART2_SendChar(*s);
                s++;
        }
}

最佳答案

查看完整内容[请看2#楼]

串口接收程序已做出来了,可以在stm8s_it.c源文件里找到库函数INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21),然后把代码添加到这个函数里就可以了。定义一个数组用来存放接收的数据。主函数main可以直接调用这个数组读取里面的数据。变量的定义和放置位置可以根据自己需要来定。 #define UART_BUFFERSIZE 1024 char UART_Buffer; u16 UART_Buffer_Size; INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21) { /* In order to ...
天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-5-14 10:39:34 | 显示全部楼层
串口接收程序已做出来了,可以在stm8s_it.c源文件里找到库函数INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21),然后把代码添加到这个函数里就可以了。定义一个数组用来存放接收的数据。主函数main可以直接调用这个数组读取里面的数据。变量的定义和放置位置可以根据自己需要来定。
#define UART_BUFFERSIZE 1024
char UART_Buffer[UART_BUFFERSIZE];
u16 UART_Buffer_Size;

INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
        UART2_ClearITPendingBit(UART2_IT_RXNE);
   
    if(UART_Buffer_Size < UART_BUFFERSIZE)
        {
                UART_Buffer_Size = 0;
        }
        UART_Buffer[UART_Buffer_Size] = UART2->DR;
        UART_Buffer_Size++;

}
天道酬勤
回复

使用道具 举报

109

主题

5556

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10449
金钱
10449
注册时间
2017-2-18
在线时间
1890 小时
发表于 2019-5-14 11:06:55 | 显示全部楼层
帮顶~~
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2019-5-14 11:17:18 | 显示全部楼层
本帖最后由 紫气东升 于 2019-5-14 11:18 编辑

比如我用串口助手发送一条指令,会自动收到一条蓝牙反馈回来的指令。程序那边用代码应该怎么写接收?
1.png
天道酬勤
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 19:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表