你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32G4 NUCLEO G431RB】5.UART中断通信

[复制链接]
jundao721 发布时间:2019-9-15 11:07
关于串口通信,也是一般常用的和其他设备通信的接口方式。UART为异步方式,USART比UART多了一个同步方式,就是这点区别。关于这个功能的测试多花了点时间,主要问题是感觉配置都对,但数据发送不出来,不知道什么问题。待细细讲来。
板卡上有PA9和PA10两个端口,和串口线连接图,如图1所示:

  初始化时钟,引脚,UART等,可是发送的时候就是发送不出来。没想明白。然后把例程改了改,发送接收都没问题,可是自己写的话就不能完成功能,的确花了点时间。后来早上翻看的时候,发现时钟部分外设时钟没有定义,这一点可能受原来编程配置的影响,没注意这个地方,希望其他人引起重视。
  引脚定义如下:
  1.    __HAL_RCC_GPIOA_CLK_ENABLE();
  2. //         __HAL_RCC_GPIOC_CLK_ENABLE();

  3.     GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
  4.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  5.     GPIO_InitStruct.Pull = GPIO_PULLUP;
  6.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7.     GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  8.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
复制代码
  外设定义如下:
  1. huart1.Instance = USART1;
  2.   huart1.Init.BaudRate = 9600;
  3.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  4.   huart1.Init.StopBits = UART_STOPBITS_1;
  5.   huart1.Init.Parity = UART_PARITY_NONE;
  6.   huart1.Init.Mode = UART_MODE_TX_RX;
  7.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  8.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  9.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  10.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  11.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  12.   if (HAL_UART_Init(&huart1) != HAL_OK)
  13.   {
  14.     Error_Handler();
  15.   }
复制代码
  外设时钟定义如下:
  1. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  2.    PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
  3.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  4.   {
  5.     Error_Handler();
  6.   }
复制代码
  数据发送函数:
  1. HAL_UART_Transmit(&huart1, (uint8_t *)txbuf ,2,5000);
复制代码
  数据中断函数:
  1. HAL_UART_Receive_IT(&huart1, (uint8_t *)rxbuf , 2);
复制代码
测试采用正常发送,中断接收的方式。效果如图2所示:

图1

图1

图2

图2
收藏 评论2 发布时间:2019-9-15 11:07

举报

2个回答
qqw1111 回答时间:2020-1-9 14:38:28
请问ad采集到的数据(unsigned short)要通过串口发送,应该怎么发呀,HAL_UART_Transmit(&huart1,"hhh",3,10); 好像只能发字符串/字符的  初学有点不太懂  
csp2019 回答时间:2020-4-9 09:51:19
qqw1111 发表于 2020-1-9 14:38
请问ad采集到的数据(unsigned short)要通过串口发送,应该怎么发呀,HAL_UART_Transmit(&huart1,"hhh",3,1 ...

使用sprintf函数,转为字符串就好了。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版