扩展一下基本知识就是:串口协议是这么规定的:起始位 +数据(8位) +停止位(这里没有校验位)。
所以我们传输一个字节数据要用到10个位。这样算下来 115200/10 = 11520 字节/s。(即速度为11520 B/s)
通俗一点的说的话,KB是1024个B,11520 (B/S) / 1024 = 11.25KB/S就是我们这个功能所拥有的速度了。
这个是为了让你知道它的速度局限在哪里。因此来做一些它所力所能及的事情。当然如果数据量大,必要的话我们还会开启DMA选项。
以后再做论述。
3.生成代码,点菜单栏Project选项 和原来一样点生成代码,生成后,不用再点Open project,关闭对话框,你点原来的还在打开的工程,就会出现Reload选项(重新加载),点Reload就可以了。这样你原来的代码就可以更新了。Reload之后我们就可以在application/user中发现多了一个usart.c的文件了。ok,功能加载成功。
4.功能实现:发送,发送是最简单的了,因为他由你决定什么时候发送,你只需要把你的数据送到功能寄存器,然后给它一个指令就由硬件biu的发送出去了.....(这也是为什么我们花钱的买它原因吧....毕竟方便就像电器使用一样.)
那么说明书在哪里呢,我们点进工程的Driver/STM32F4xx_HAL_Driver目录,找到stm32f4xx_hal_uart.c
ok,这里有一个大标题 ##### How to use this driver #####,下面一段文章详细的叙述了如何去使用这个驱动器(东西多我就不贴出来了。我当时就看了这个发现他其实说的挺好的了。包括步骤,函数介绍啥的。这里我当做各位英语水平都是ok的哈,不ok,google翻译,问人,百度。怎么都行,路总有的。)
拖出来人家写好的:
// 串口的发送接收函数:
// 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():传输过程中出现错误时,通过中断处理函数调用。
好,直接在主循环里面调用
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
如图:
发送直接有了。(ˉ▽ ̄~) 切~~
5.功能实现:接收 。 关于中断接收,根据说明The specific UART interrupts (Transmission complete interrupt, RXNE interrupt and Error Interrupts) will be managed using the macros __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit and receive process.
i. ※我们要先使用 __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);对串口Usart1 的接收中断进行使能。
ii.然后中断的处理在 stm32f4xx_it.c 函数。进行接收和处理。
烧写测试,ok。没问题。 收发都正常了。开始进行原子的Usart功能移植。
//---------------------------------------------华丽的分割线------------------------------------------------------
Cubemx的命名都比较的规范,原子移植的话要改动的地方还是挺多的。
活用文本处理 将 u8 u32等批量修改成uin8_t 等符合STM32Cubemx的规则。
同时我还写了一个重定向和bootinfo来打印开机信息(软件版本 硬件版本)以及芯片序列号
花了差不多20分钟移植。。。如果你要用的话 非常方便
1. 建立一个工程
2.Cube中打开Usart1功能(异步,打开Nvic中断两个步骤)
3.把代码中的Usmart文件夹移过去。
4.Include头文件路径 添加.C文件
5.然后在Main.c加
usmart_dev.init(90);
初始化
6.在stm32f4xx_it.c中的Usart1_Handler函数添加Usmart_Rev_Pro();即可
可以看到开机打印信息,以及灯函数翻转测试. 整个工程从零开始,写博客,完成耗费时间4小时。希望能帮到大家哈。
第一次开始写这种说明博客,如有不好多多担待,支持我,将持续更新关于Stm32cubemx的使用。