本次实验使用的NUCLEO-G071RB开发板由
https://www.stmcu.com.cn/index.p ... /261/layout/product提供,更多相关资讯请进入查询。本次实验是利用NUCLEO-G071RB开发板的USART2模块与PC进行通信,在PC端通过串口助手向NUCLEO-G071RB发送控制字符来控制LD4的“亮”、“灭”状态,以及向PC端返回指定信息。
一、实验资源
1、NUCLEO-G071RB开发板;
2、Keil v5.25.2.0;
3、STM32CubeMX v5.0.1;
4、SSCOM v5.13.1;
二、实验过程 1、资源分配
NUCLEO-G071RB板载STM32G071RBT6微控制器,其内部的串口资源还是非常丰富的,从下图可以看到该器件包含USART[1-4]以及低功耗串口LPUART1在内多达5个串口。另外其内部嵌入了精确的时钟,不仅仅能在生产上降低成本并能在产品设计上减少很多麻烦。
从原理图中可以看到NUCLEO-G071RB的“VCP”利用了微控制器的USART2,即PA2与PA3引脚。打开STM32CubeMX可以看到默认状态下“VCP”使用的是“LPUART1”,因为PA2与PA3引脚能干的活儿太多,不只是能配置成“USART2”也能被配置成“LPUART1”。使用STM32CubeMX真是很方便,鼠标点几下就配置成“USART2”了,这里就利用USART2配合内部高精度时钟来进行实验。
从下面几张图中可以看到USART2及时钟的配置:115200、8、n、1;USART2时钟为来自PCLK的64MHz;
2、程序实现
将经过STM32CubeMX生成的工程文件通过Keil打开进行二次加工、编译,首先在usart.c中添加了“重定向”函数,方便串口干活儿:
- /* USER CODE BEGIN 1 */
- /*重定向getchar到LPUART1*/
- int fgetc(FILE * f)
- {
- uint8_t ch = 0;
- HAL_UART_Receive(&huart2, &ch, 1, 0xFFFF);
- return ch;
- }
- /*重定向printf到LPUART1*/
- int fputc(int ch, FILE *f)
- {
- HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0XFFFF);
- return ch;
- }
- /* USER CODE END 1 */
复制代码
下面是这函数中的内容:
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- uint8_t rx;
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART2_UART_Init();
- /* USER CODE BEGIN 2 */
- Print_Infor();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- rx = getchar();
- printf("\r\n>>>收到字符:%c\n",rx);
- switch(rx)
- {
- case'1':HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
- if(HAL_GPIO_ReadPin(LD4_GPIO_Port, LD4_Pin))
- printf("LD4已点亮\r\n");
- break;
-
- case'2':HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
- if(!HAL_GPIO_ReadPin(LD4_GPIO_Port, LD4_Pin))
- printf("LD4已熄灭\r\n");
- break;
-
- case'3':printf("新一代入门级32位STM32G0系列\r\n");
- printf(" bbs.eeworld.com.cn \r\n");
- printf("\r NUCLEO-G071RB \r\n");
- break;
-
- default:printf("请重新输入控制字符...\r\n"); break;
- }
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
复制代码
三、实验结果
四、实验总结
实验实现了串口数据的收发,对USART模块加深了学习,有收获。后面要尝试对LPUART模块进行学习,利用LPUART实现本次实验过程。
附:本次实验工程
USART2.rar
(4.88 MB, 下载次数: 17)
此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处