STM32串口接收发送子程序

发布者:MysticalGarden最新更新时间:2018-06-20 来源: eefocus关键字:STM32  串口  接收发送 手机看文章 扫描二维码
随时随地手机看文章

/*上传STM32串口接收发送子程序,调试验证OK,供参考*/

#include


static UART_HandleTypeDef* pstm32uart_entry = NULL;


 int STM32_SendBuffer(const char* pcmd);
const char* STM32_GetBuffer(void);


#define UART__TIMEOUT 500


void WaitSTM32UartReady()
{
    HAL_UART_StateTypeDef status;
    do
    {
        status = HAL_UART_GetState(pstm32uart_entry);
    }while(status != HAL_UART_STATE_READY);
}


int uart_putc(int c)
{
    while (!__HAL_UART_GET_FLAG(pstm32uart_entry, UART_FLAG_TXE));
    
    pstm32uart_entry->Instance->TDR =  (c & 0xff); // for f030c8
    return 0;
}


int uart_getc(void)
{
    while (!__HAL_UART_GET_FLAG(pstm32uart_entry, UART_FLAG_RXNE));
return  pstm32uart_entry->Instance->RDR & 0xff; 
}


int  STM32_SendBuffer(const char* pcmd)
{
    while(*pcmd != '\n')
        uart_putc(*pcmd++);
    
    return SUCCESS;
}


static char STM32_Buf[32];


const char* STM32_GetBuffer()
{
    int i = 0;
    if(pstm32uart_entry == NULL)return NULL;
       
    while(1)
    {
        char szchar = uart_getc();
        if(szchar == '\n')
            break;
        else STM32_Buf[i++] = szchar;
    };
   
    
    if(i == 1)STM32_Buf[0] = 0x00;
    else STM32_Buf[i+1] = 0x00;
 
    //   DBGSTR("STM32_GetBuffer : %s",&STM32_Buf[0]);
    return &STM32_Buf[0];
}

关键字:STM32  串口  接收发送 引用地址:STM32串口接收发送子程序

上一篇:STM32串口接收粉尘传感器数据
下一篇:stm32F103状态机矩阵键盘

推荐阅读最新更新时间:2024-03-16 16:06

10.利用STM32定时器的PWM输出功能,直接获取PWM波形
本实验向大家展示如何输出占空比固定的PWM波形。 1.工程的建立: 2.主函数代码: 3.pwm_output.c代码: 4.output.h代码: 5.结果: 6.结果显示不出来的请看上几节的文章,已解决。
[单片机]
10.利用<font color='red'>STM32</font>定时器的PWM输出功能,直接获取PWM波形
stm32串口1和RS485通信的串口2的配置
stm32串口1的配置 #if EN_USART1_RX //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx- SR能避免莫名其妙的错误 u8 USART_RX_BUF ; //接收缓冲,最大USART_REC_LEN个字节. //接收状态 //bit15, 接收完成标志 //bit14, 接收到0x0d //bit13~0, 接收到的有效字节数目 u16 USART_RX_STA=0; //接收状态标记 void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_In
[单片机]
STM32系统时钟树分析
下面是一个STM32芯片的时钟树图 1、LSI是低速内部时钟,RC振荡器,频率为32kHz左右。供独立看门狗和自动唤醒单元使用。 2、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。 3、HSE是高速外部时钟,课接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。我们开发板接的是8M的晶振。HSE也可以直接作为系统时钟或者PLL输入。 4、HSI是高速内部时钟,RC振荡器,频率为16MHz。可以直接作为系统时钟或者用作PLL输入。 5、PLL为锁相环倍频输出。STM32F4有两个PLL: (1)主PLL由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。 第一个
[单片机]
<font color='red'>STM32</font>系统时钟树分析
STM8S 串口应用 UART2 STM8S105
//少说话,多做事,以下是我验证过没有问题的串口发送接受数据 //使用MCU stm8s105c6 UART2 //初始化时调用: GPIO_DeInit(GPIOD); /* Configure PD5/6 */ GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_PU_NO_IT);//发送数据IO GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);//接受数据IO UART2_DeInit(); UART2_Init(2400,UART2_WORDLENGTH_8D,UART2_STOPB
[单片机]
STM32的backtrace深度讲解(cortex-m的栈布局与栈回溯的原理和方案)
1.说明 2.cortex-m上的栈布局 2.1 cortex-m上的寄存器 2.2 cortex-m上的自动压栈 2.3 cortex-m上的函数执行流程 3.cmbacktrace原理分析 3.1 问题分析 4.实际应用 5.总结 1.说明 对于一个嵌入式产品的开发流程来说,一般都需要经过如下几个阶段: 1.方案预研 2.产品功能设计 3.开发调试 4.工厂测试 5.产品上线售后 一般来说,1,2,3板子都是在开发者手上,一旦遇到bug,只要可以复现,基本上都可以排查出来,然后修复或者规避。但一旦进入到4,5阶段,产品已经成型之后,再想排查BUG就比较麻烦了。例如工厂测试阶段,有可能连续运行好几天或
[单片机]
<font color='red'>STM32</font>的backtrace深度讲解(cortex-m的栈布局与栈回溯的原理和方案)
单片机IO口模拟UART串口通信
为了让大家充分理解 UART 串口通信的原理,我们先把 P3.0 和 P3.1 当做 IO 口来进行模拟实际串口通信的过程,原理搞懂后,我们再使用寄存器配置实现串口通信过程。 对于 UART 串口波特率,常用的值是 300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200 等速率。IO 口模拟 UART 串行通信程序是一个简单的演示程序,我们使用串口调试助手下发一个数据,数据加 1 后,再自动返回。 串口调试助手,这里我们直接使用 STC-ISP 软件自带的串口调试助手,先把串口调试助手的使用给大家说一下,如图 11-6 所示。第一步要选择串口助手菜单,第二步
[单片机]
单片机IO口模拟UART<font color='red'>串口</font>通信
STM8学习笔记----普通IO口模拟串口功能
串口在产品应用中很常见,但是单片机的默认带的串口往往比较少,有时候就会出现串口不够用,所以就想着能不能用普通IO口模拟串口来实现串口的功能。 要模拟串口首先要清楚串口数据传输过程中的原理。 常用的串口格式为 1位起始位,8位数据位,无校验位,1位结束位。起始位为低电平,结束位为高电平。数据0为低电平,数据1为高电平。 所以最简单的串口传输一个字节总共有10个电平变化,每个电平的宽度由波特率决定的。 具体的串口数据分析,可以参考这篇文章:STM8学习笔记---通过示波器分析串口数据。 下面看一个通过波特率如何计算每个位的电平宽度。 发送一个字节,以stm8中9600bit/s的波特率计算的过程为例(1秒钟传输
[单片机]
STM8学习笔记----普通IO口模拟<font color='red'>串口</font>功能
STM32 SysTick中断使用方法
SysTick中断属于核内外设中断器,中断号为-1。想要使用SysTick中断,只需在SysTick查询定时上进行稍微的修改。需要添加开启中断,直接用中断函数对计数标志位进行清零,不再使用查询方式判断计数是否结束去清零。中断函数接口SysTick_Handler在汇编文件中已经给出定义,直接到文件中查找即可。 本来NVIC提供了中断使能的函数,但是要求中断号要大于0(Value cannot be negative.),所以就不能调用NVIC中断使能函数了,直接在操作寄存器开启中断就可以了。 修改如下: #include delay.h #include led.h void Systick_Delayus
[单片机]
<font color='red'>STM32</font> SysTick中断使用方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved