【 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]