本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考;
本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过芯片PB6,PB7 的USART1 口,实现串口通信。
原理:电脑上的串口调试器软件通过USB转TTL模块发数据给板子,板子把收到的数据发送给模块,数据在串口调试器软件上显示。
涉及到的知识:配置UART引脚,串口通信,STM32CubeMX的使用
我是将PB7作为RX,PB6作为TX,使用USART1,如果你要使用其他引脚,或者使用USART2,换成其他引脚即可;
文章目录
- 1 新建工程
- 2 配置SWD下载引脚
- 3 配置USART
- 4 配置RCC
- 5 设置系统主频
- 6 生成工程
- 7 增加代码实现串口收发
1 新建工程
点击File 菜单下的New Project
选择芯片型号,如下图所示先输入芯片型号,目前这边输入STM32G030C8,
双击选择,就确定了芯片型号,界面会变成如下图所示
2 配置SWD下载引脚
如下图所示,在Pinout&Configuration 栏目的System Core 下,先点击SYS,再勾选Serial Wire 框,
配置好SWD 下载引脚设置:
3 配置USART
因为STM32G030C8T6默认的USART1引脚为PA9和PA10,所以如果直接在STM32CubeMX上点USART1,那么点亮的引脚会是PA9和PA10,而我是要使用PB6和PB7,因此,先点击PB6,PB7,将其配置为UART口,如下所示:
先点击PB6,将其配置为USART1_TX
然后点击PB7,将其配置为USART1_RX:
配置完成后,PB6和PB7均被点亮:
然后使能中断,如下图所示:
4 配置RCC
如下图,先点击RCC,在HSE 配置中选择Crystal/Ceramic Resonator 外部晶振设
5 设置系统主频
如下图, 先点击Clock Configuration 栏目,按下图的1,2,3,4 步骤完成系统64MHZ 主频设置:
6 生成工程
按照下图的步骤,进行项目配置,项目名称和路径设置等,生成项目的类型选择STM32CubeIDE(我这里以STM32CubeIDE为例,如果你要试用keil5,那就选择MDK-RAM,如果要使用makefile,就选择Makefile),注意项目名称和路径不要有中文名;
最后全部设置完毕后点击create code,生成项目代码:
生成的工程如下图所示:
7 增加代码实现串口收发
如下图实现数组的定义,数据接收回调函数定义,接收数据,发送数据。
uint8_t aTxBuffer[] = "HelloWorld";//定义发送数组的内容,长度10字节
#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
#define TXBUFFERSIZE (COUNTOF(aTxBuffer) - 1)//计算长度宏定义
/* Size of Reception buffer */
#define RXBUFFERSIZE TXBUFFERSIZE//定义接收数据的长度
uint8_t aRxBuffer[RXBUFFERSIZE];//定义接收数组
__IO ITStatus UartReady = RESET;//状态控制位,SET说明收到数据
//串口接受回调函数,接收到数据,状态位置位
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UartReady = SET;
/* NOTE : This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback can be implemented in the user file.
*/
}
if (HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)//接收中断使能
{
}
while(UartReady != SET)//判断是否有接收到数据,没有则一直等待
{
}
if(HAL_UART_Transmit_IT(&huart1, (uint8_t *)aRxBuffer, TXBUFFERSIZE) != HAL_OK)//发送数据
{
UartReady=RESET;//状态清0
}
测试:
按图1连接,板子的PA9,PA10,GND分别跟USB转TTL模块的RXD,TXD,GND相连,板子上电,用串口调试器发送Helloworld,板子能返回Helloworld,说明板子串口收发OK。