STM32Cube的串口配置与使用

发布者:渤海湾最新更新时间:2019-04-25 来源: eefocus关键字:STM32Cube  串口配置  使用 手机看文章 扫描二维码
随时随地手机看文章

1、串口的配置

1)首先打开你的工程,在STM32Cube里面找到USART1,此时串口默认是Disanle的,我们要使能它,选择Asynchronous.


2)然后点击Configuration,就会有一个串口的配置图框,点进去配置串口,如果需要用到中断,选择NVIC进去进行相关配置。


串口配置:

串口中断使能:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------


2、查看串口内的函数API

Keil工程内选择{ }Functions,然后选择你需要查看的目标源文件,展开既是该源码内的函数


串口的发送接收函数:


HAL_UART_Transmit();//串口轮询模式发送,使用超时管理机制

 

HAL_UART_Receive();//串口轮询模式接收,使用超时管理机制

 

HAL_UART_Transmit_IT();//串口中断模式发送

 

HAL_UART_Receive_IT();//串口中断模式接收

 

HAL_UART_Transmit_DMA();//串口DMA模式发送

 

HAL_UART_Receive_DMA();//串口DMA模式接收

串口相关的中断函数:


HAL_UART_TxHalfCpltCallback()://一半数据(half transfer)发送完成后,通过中断处理函数调用。

 

HAL_UART_TxCpltCallback()://发送完成后,通过中断处理函数调用。

 

HAL_UART_RxHalfCpltCallback()://一半数据(half transfer)接收完成后,通过中断处理函数调用。

 

HAL_UART_RxCpltCallback():///接收完成后,通过中断处理函数调用。

 

HAL_UART_ErrorCallback():/传输过程中出现错误时,通过中断处理函数调用。

串口有三种通信模式:


第一种是轮询的模式。CPU不断查询IO设备,如设备有请求则加以处理。例如CPU不断查询串口是否传输完成,如传输超过则返回超时错误。轮询方式会占用CPU处理时间,效率较低。


第二种就是中断控制方式。当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。


第三种就是直接内存存取技术(DMA)方式。所谓直接传送,即在内存与IO设备间传送一个数据块的过程中,不需要CPU的任何中间干涉,只需要CPU在过程开始时向设备发出“传送块数据”的命令,然后通过中断来得知过程是否结束和下次操作是否准备就绪。


--------------------------------------------------------------------------------------------------------------------------------------------------------------------


3、在main.c文件添加printf支持

/* USER CODE BEGIN 1 */

 

#ifdef __GNUC__

 

       /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf

     set to 'Yes') calls __io_putchar() */

 

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

 

#else

  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

 

#endif /* __GNUC__ */

 

/**

  * @brief  Retargets the C library printf function to the USART.

  * @param  None

  * @retval None

  */

PUTCHAR_PROTOTYPE

{

 /* Place your implementation of fputc here */

  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */

  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;

}

 

/* USER CODE END 1 */


--------------------------------------------------------------------------------------------------------------------------------------------------------------------


4、单独串口中断的使用

1)在main函数前面添加两个数组变量


uint8_t aTxStartMessage[] = "rn UART-communication based on IT rn";

 

uint8_t aRxBuffer[20];

/* USER CODE END PV */

 


2)在main函数中添加语句接收数据10个字符,保存在数组aRxBuffer中。


HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 10);//串口接收中断使能,如果要循环使用就放到while(1)里面


3)在main.c文件添加中断接收完成回调函数。中断回调函数中将接收到的数据又通过串口发送回去。


/* USER CODE BEGIN 4 */

/**

  * @brief Rx Transfer completed callbacks

  * @param huart: uart handle

  * @retval None

  */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

  /* Prevent unused argument(s) compilation warning */

  UNUSED(huart); 

 

  /* NOTE : This function should not be modified, when the callback is needed,

            the HAL_UART_RxCpltCallback can be implemented in the user file

   */

    HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 10,0xFFFF);//发送10个数据给串口1

    HAL_UART_Receive_IT(&huart1,aRxBuffer,10);      // 重新使能串口1接收中断  

}

 

/* USER CODE END 4 */

----------------------------------------------------------------------------------------------------------------

5、多个串口同时使用

1)定义串口1和串口3的接收数据变量



2)中断回调函数


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

 /* Prevent unused argument(s) compilation warning */

  UNUSED(huart);

 

  /* NOTE : This function should not be modified, when the callback is needed,

            the HAL_UART_RxCpltCallback can be implemented in the user file

   */

        if(huart->Instance ==  USART1)//串口1做调试

        {

           // HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer1, 10,0xFFFF);

 

             RECV_FLAG1 = 1;

 

            HAL_UART_Receive_IT(&huart1,aRxBuffer1,10);  // 再次串口接收中断使能 

        }

 

        else if(huart->Instance ==  USART2)//串口2接蓝牙

        {

           HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer2, 3,0xFFFF);

 

             RECV_FLAG2 = 1;

 

            HAL_UART_Receive_IT(&huart2,aRxBuffer2,3);  //再次串口接收中断使能  

        }   

}


3)主函数编写


Int mai(void)

{

     While(1)

    {

        if(RECV_FLAG2 == 1)

       {

          RECV_FLAG2= 0;

 

        Car_contrl(aRxBuffer2[0]);  //控制协议cmd[3]:cmd[0]=控制码  cmd[1]=0xD   cmd[2]= 0xA   

       }

 

    HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer1, 10); //串口1接收中断使能

 

    HAL_UART_Receive_IT(&huart2, (uint8_t *)aRxBuffer2, 3); //串口3接收中断使能,所以大小为3:0D 0A 01

 

    }

 

}


-----------------------------------------------------------------------END--------------------------------------------------------------------------

--------------------- 

关键字:STM32Cube  串口配置  使用 引用地址:STM32Cube的串口配置与使用

上一篇:UCOSIII在STM32F4xx上的移植
下一篇:stm32cube学习笔记(2)

推荐阅读最新更新时间:2024-11-12 03:56

9、STM32的PWM的原理与使用(内附代码)
1、PWM是什么? 是脉冲宽度调制,简称脉宽调制。利用微处理器数字输出对模拟电路进行控制的一种有效的技术,就是对脉冲宽度的控制。 这里说的脉冲,就是我们产生的方波。方波就是N个这样的周期连续的产生。 一个周期内高电平持续的时间就是脉冲宽度(脉宽),而PWM(脉冲宽度调制)就是控制一个周期内的高电平的持续时间。 2、简单的PWM的原理示意图 CNT:是当前值寄存器,计数寄存器。 ARR:是自动重载寄存器(初始化设定)。 CCRx:比较值寄存器(TIM_SetCompare1()设定修改占空比)。 假定定时器工作在向上计数PWM模式下: 当CNT CCRx时,引脚输出0,当CNT =CCRx时,引脚
[单片机]
9、STM32的PWM的原理与<font color='red'>使用</font>(内附代码)
PIC单片机gpio配置使用步骤
配置步骤如下: 第一步:首先配置ANSELx寄存器,将IO口定义为数字IO,还是模拟输入IO 第二步:配置TRISx, 将IO口定义为输入,还是输出 第三步:若定义IO口为输入,要得到IO端口的实际电平,则直接读取PORTx寄存器,若将IO口定义为输出,则通过写LATx来达到对IO口置高低电平操作。 注意:若直接写PORTx寄存器,实际上会写入到LATx中,所以一般不写入PORTx寄存器。若直接读取LATx寄存器,读取到的是锁存在GPIO Latch中的数据,而不是真正的IO端口数据,所以一般不读取LATx寄存器。 当某个引脚配置成模拟IO时候,必须将其相应的TRISx配置成输入,这样才能读取到引脚上外部电压
[单片机]
PIC单片机gpio<font color='red'>配置</font>与<font color='red'>使用</font>步骤
数字万用表使用问题解答
1、蜂鸣器功能是做什么用的? 答:蜂鸣器功能,是的附加功能,一般做在2kω档,一般是当测量阻值为50ω以下的线路(或电阻)时,内置蜂鸣器发声。这个功能在实际中,作用很大,可以提高测量线路通断的工作效率,是检修的必备功能。 2、为什么数字万用表在200ω档短接不回零呢? 答:在200ω档,由于线路、仪表内阻及接触点存在阻值,所以短接时,有一些尾数是正常的,这个尾数在使用中会越来越大,不可调整,但是可以通过擦洗线路板、紧密接触点来减少数值。可以在使用中,先短接,并记下数值,在测量中减去就可以了。 3、如何确定万用表是好的? 答:这是一个比较大的问题,将每个功能量程都试一下是一个比较好的方法。检测时,先要找到检测源,但是一般用户都自备标
[测试测量]
示波器探头常用附件的使用方法
探头是示波器最常用到的探测工具,针对不同的场合会使用不同的探头。最通用的一种探头是高阻无源探头,前端一般是一个鳄鱼夹的地线夹和一个探测信号的钩子。这种方法适用于通用的探测场合,但并不是全部,针对某些特殊的应用用户可能会需要更多更灵活的连接方式,比如针对封装密度比较高的芯片或者要做长时间测量的场合。探头厂家随着探头一般也会提供一些常用的其它附件,但是大部分用户都不太清楚这些附件如何使用。接下来普科科技prbtek将对无源探头的一些附件和应用场合做个简单介绍,以方便大家选择。 首先从地线说起。通常探头标配的15cm长的黑色的地线夹可以实现较方便的地线连接,但是这么长的地线由于电感效应在测高频信号时会产生比较大的振荡,再有开关电源的
[测试测量]
示波器探头常用附件的<font color='red'>使用</font>方法
微软将取消使用Windows Phone名称
   未来微软将取消在Lumia系列手机使用Nokia品牌名称,甚至之后也将取消使用Windows Phone名称,而将统一于旗下手机产品使用Windows名称。 虽然将Nokia装置与服务并入后,微软依然可在Lumia系列手机产品继续使用Nokia品牌名称,但微软先前便证实之后将以更适合的名称取代,同时在近期对外发表活动也取消使用Nokia品牌。 根据Geek on Gadgets网站取得微软内部文件显示,微软计画未来仅以Lumia系列为旗下行动装置产品命名,甚至准备取消使用Windows Phone平台名称,而将统一以Windows作为所有操作系统称呼。 在此之前,微软其实也有相关迹象显示未来将以Windows作为旗下
[手机便携]
STM32学习006_Systick使用(一)
Systick是STM32中特有的系统时钟 Systick有两个功能: 1.可以产生精确延时; 2.可以提供给系统一个单独的时钟节拍。 一般延时程序: DELAY(N) { for( i=0 ; i =x ; i++ ) ; } 对于STM32系列的微处理器中,执行一条指令只需要几十ns,进行for循环时,要实现N毫秒延时,那么x的意义非常大,而且由于系统频率的宽广,很难计算出延时N毫秒的精确值,那么在一些高速电路中,是不允许的,容易出现问题,很难查找出来。尤其在液晶驱动中,延时要求非常精确。针对STM32的处理器中,需要重新设计一个方法实现该功能,来代替DELAY(N)延时; cortex-m3中包含了一个Systick时钟
[单片机]
示波器的触发模式与使用方法
扫描线,屏幕上什么都没有,对于数字示波器会看不到波形更新,不了解这一点常常会以为是信号没连上或什么其他故障。 第三种是“单次模式(SINGLE)”: 这种模式与“正常模式”有点类似,就是只有当触发条件满足时才产生扫描,否则不扫描。 而不同之处在于,这种扫描一但产生并完成后,示波器的扫描系统即进入一种休止状态,即使后面再有满足触发条件的信号出现也不再进行扫描,也就是触发一次只扫描一次,即单次,必须通过手工的方法将扫描系统重启,才能产生下一次触发。 显然,对于普通模拟示波器而言在这种模式下您经常会发现什么也看不到,因为波形一闪而过,示波器不能将其保留,在多数场合这种模式没有什么用。以上三种触发模式是绝大多数示波器都会提供。
[测试测量]
示波器的触发模式与<font color='red'>使用</font>方法
单片机+JQ6500语音模块使用代码
最近在家无聊做东西玩,要用一个模块驱动喇叭放提示音,一开始买的是WT588DM01图的就是自带8M Flash省心,结果TM还要另外买30几块钱的烧写器才能用。 后来又咬咬牙买了个JQ6500语音模块,插USB连电脑就能烧写mp3进去,果然还是深圳厂商洞察需求。 买是买来了,但是厂家配的资料还分3个版本,PCB外观都改了,PDF没更新,只好自己捣鼓,按着参考资料用个51试试手。 这是PDF里面的模块外面图,实际买来的长下面的样子 芯片是24脚,模块16脚。引出来的16个脚没变,就是模块PCB板上面有略微变化,但是不影响对模块引出来的16个脚直接使用。 模块接线原理图,SPK+和SPK-实测可以直接接无源蜂
[单片机]
单片机+JQ6500语音模块<font color='red'>使用</font>代码
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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