[STM32F4] cubeMX操作串口的教程谁有啊?

[复制链接]
 楼主| dongnanxibei 发表于 2018-11-19 15:50 | 显示全部楼层 |阅读模式
求一个使用教程。怎么从0配置好自己的工程。发现建立工程太费劲了。难道只能用官方的例子改吗
 楼主| dongnanxibei 发表于 2018-11-19 21:14 | 显示全部楼层
一、HAL库相关函数

       1、串口发送/接收函数

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

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

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

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

                HAL_UART_Transmit_DMA();串口DMA模式发送

                HAL_UART_Transmit_DMA();串口DMA模式接收

        2、串口中断函数

             HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用

                HAL_UART_TxCpltCallback();数据完全发送完成后调用

                HAL_UART_RxHalfCpltCallback();一般数据接收完成时调用

                HAL_UART_RxCpltCallback();数据完全接受完成后调用

                HAL_UART_ErrorCallback();传输出现错误时调用



二、程序思路

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



三、工程模板生成

        1、打开STM32CubeMX,点击New Project

210305bf2b6a0b8710.png

2、选择单片机对应的参数,这里使用的是STM32F429IGTx,选择后点击OK。
479295bf2b6a930f31.png


3、创建完成后在左边找到并打开RCC选项卡进行时钟使能,将高数外部时钟(HSE)的时钟源选择为晶体振荡器

961055bf2b6afbd519.png

4、在窗口上方的选项卡找到Clock Configuration ,进行时钟源的选择与倍频/分频系数的设置

141485bf2b6b81ae04.png

5、由于之前使能了HSE,故在Clock Configuration中可用。这里将PLL时钟源选择为HSE,系统时钟源(SYSCLK)设置为PLLCLK,分频与倍频系数如图

339965bf2b6c139598.png

6、返回之前设置RCC的页面(pinout),找到USART1,使能为异步通讯(Asynchronous)
973665bf2b6caba485.png


7、此时在Configuration选项卡中可以找到USART1,点击进行进一步的设置


229005bf2b6d2b5b9a.png
8、点击进入后,在Parameter选项卡中设置波特率(Baud Rate)为115200 Bits/s,字长(Word Length)为 8bits,无奇偶检验(Parity),停止位(Stop Bits)为1,其他选项保持默认。

740995bf2b6daed97f.png

9、因为该程序使用的是中断处理,所以还需要打开NVIC Settings页面,使能中断

83115bf2b710cead1.png

10、设置完毕后点击Apply,再点击OK关闭页面。在窗口左上角的Project选项卡中点击Generate Code 来创建模板
779235bf2b7190ecde.png


11、分别填入工程名,工程输出目录,所使用的编译器(这里使用MDK5)


538155bf2b71fda8ec.png
12、生成成功
232445bf2b727de057.png


13、点击Open Project打开生成好的模板,在Application/User文件夹下找到main.c。
554415bf2b72ed9445.png




对工程模板生成方法的介绍到此为止,接下来是对代码的介绍


 楼主| dongnanxibei 发表于 2018-11-19 21:16 | 显示全部楼层
四、程序编写

         1、首先在main函数前定义两个数组变量
  1. uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n";
  2. uint8_t aRxBuffer[20];

2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中。
  1.         HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度
  2.         HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);

3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.         UNUSED(huart);
  4.         HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时间
  5. }

 楼主| dongnanxibei 发表于 2018-11-19 21:17 | 显示全部楼层
  4、编译后下载至开发板 ,进行复位后通过串口监视器可看到串口发送的aTxStarMessages字符串,向串口发送10个字节的数据后可看到串口将所接收数据又发送回来(注意由于HAL_UART_Receive_IT()函数中的字节参数设置为了10,故只有发送10个字节的字符串才会被串口返回,且由于while循环中无语句,该程序只能执行一次)
225305bf2b7b80a965.png
617885bf2b7c06a049.png

admvip 发表于 2018-11-19 22:36 | 显示全部楼层
讲的很详细
 楼主| dongnanxibei 发表于 2018-11-19 23:05 | 显示全部楼层

没办法,问完没人鸟我,我只能自己找了。
xuanhuanzi 发表于 2018-11-19 23:19 | 显示全部楼层
多谢分享。
晓伍 发表于 2018-11-21 10:07 | 显示全部楼层
二楼好详细
八层楼 发表于 2018-11-21 12:43 | 显示全部楼层
百度上就有呀
观海 发表于 2018-11-21 12:47 | 显示全部楼层
不费劲呀 用的不熟练而已
huangcunxiake 发表于 2019-7-10 13:06 | 显示全部楼层
好资料。
 楼主| dongnanxibei 发表于 2019-7-10 17:40 | 显示全部楼层
非常好。
HXM1593 发表于 2019-7-13 16:15 | 显示全部楼层
你好,我按你的教程加了这几行,生成的工程,编译生成工程都行。在运行调试时出现这个画面,不能运行,楼主有吗?能把你这个最简易的工程发一份,参考一下,谢谢
QQ截图20190713093510.png QQ截图20190713094343.png
 楼主| dongnanxibei 发表于 2019-8-12 20:35 | 显示全部楼层
HXM1593 发表于 2019-7-13 16:15
你好,我按你的教程加了这几行,生成的工程,编译生成工程都行。在运行调试时出现这个画面,不能运行,楼主 ...

看提示啊,你17行语法错误,应该是少了个大于号还是啥。。。看不清,可能是括号少了半边。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

3840

帖子

18

粉丝
快速回复 在线客服 返回列表 返回顶部