lising 发表于 2019-1-7 23:34

【 ST NUCLEO-G071RB测评】USART

<div class='showpostmsg'>      本次实验使用的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以及低功耗串口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实现本次实验过程。
附:本次实验工程

此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处


</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【 ST NUCLEO-G071RB测评】USART