打印
[STM32F4]

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

[复制链接]
1684|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
求一个使用教程。怎么从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



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



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



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



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



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



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



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



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



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



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



12、生成成功



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





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


使用特权

评论回复
板凳
dongnanxibei|  楼主 | 2018-11-19 21:16 | 只看该作者
四、程序编写

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

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

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

使用特权

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



使用特权

评论回复
5
admvip| | 2018-11-19 22:36 | 只看该作者
讲的很详细

使用特权

评论回复
6
dongnanxibei|  楼主 | 2018-11-19 23:05 | 只看该作者

没办法,问完没人鸟我,我只能自己找了。

使用特权

评论回复
7
xuanhuanzi| | 2018-11-19 23:19 | 只看该作者
多谢分享。

使用特权

评论回复
8
晓伍| | 2018-11-21 10:07 | 只看该作者
二楼好详细

使用特权

评论回复
9
八层楼| | 2018-11-21 12:43 | 只看该作者
百度上就有呀

使用特权

评论回复
10
观海| | 2018-11-21 12:47 | 只看该作者
不费劲呀 用的不熟练而已

使用特权

评论回复
11
huangcunxiake| | 2019-7-10 13:06 | 只看该作者
好资料。

使用特权

评论回复
12
dongnanxibei|  楼主 | 2019-7-10 17:40 | 只看该作者
非常好。

使用特权

评论回复
13
HXM1593| | 2019-7-13 16:15 | 只看该作者
你好,我按你的教程加了这几行,生成的工程,编译生成工程都行。在运行调试时出现这个画面,不能运行,楼主有吗?能把你这个最简易的工程发一份,参考一下,谢谢

使用特权

评论回复
14
dongnanxibei|  楼主 | 2019-8-12 20:35 | 只看该作者
HXM1593 发表于 2019-7-13 16:15
你好,我按你的教程加了这几行,生成的工程,编译生成工程都行。在运行调试时出现这个画面,不能运行,楼主 ...

看提示啊,你17行语法错误,应该是少了个大于号还是啥。。。看不清,可能是括号少了半边。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

3489

帖子

16

粉丝