找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1001|回复: 0
打印 上一主题 下一主题
收起左侧

串口屏与stm32的通信(中断模式),求助

[复制链接]
跳转到指定楼层
楼主
ID:595380 发表于 2020-11-24 00:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 51_users 于 2020-11-24 00:35 编辑

串口屏向单片机发送字符1,单片机接收到数据后PA9翻转。接收缓存长度该设置为多少?如何判断接受的字符是不是1呢?哪里需要改进或不对的地方,请帮指出来,谢谢。

/ *用户代码开头标头* /
/ **
  ******************************************** ******************************************
  * @file:main.c
  * @brief:Main程序主体
  **************************************************** ******************************
  * *注意
  *
  * <h2> <center>©版权所有(c)2020 STMicroelectronics。
  *保留所有权利。</ center> </ h2>
  *
  *该软件组件由ST根据BSD 3-条款许可进行许可,
  即“许可”;除非符合
  *许可证,否则您不得使用此文件。您可以在以下位置获得许可副本:
  * opensource.org/licenses/BSD-3-Clause
  *
  ************************************* **********************************************
  * /
/ *用户代码结尾标题* //
/包括---------------------------------------------- -------------------- * /
#include“ main.h”
#include“ usart.h”
#include“ gpio.h”

/ *私有包含--- -------------------------------------------------- ----- * /
/ *用户代码开始包括* /

/ *用户代码结束包括* /

/ *私有typedef ----------------------- ------------------------------------ * /
/ *用户代码开始PTD * /

/ *用户代码结束PTD * /

/ *私人定义---------------------------------------------- -------------- * /
/ *用户代码开始PD * /
/ *用户代码结束PD * /

/ *私有宏-------------- ----------------------------------------------- * /
/ *用户代码开始PM * /

/ *用户代码结束PM * /

/ *私有变量------------------------------- -------------------------- * /

/ *用户代码开始PV * /
uint8_t Rxbuf [8];
/ *用户代码结尾PV * /

/ *私有函数原型------------------------------------- ---------- * /
void SystemClock_Config(void);
/ *用户代码开始PFP * /

/ *用户代码结束PFP * /

/ *专用用户代码----------------------------- ---------------------------- * /
/ *用户代码开始0 * /

/ *用户代码结束0 * /

/ **
  * @brief应用程序入口点。
  * @retval int
  * /
int main(void)
{
  / *用户代码开始1 * /

  / *用户代码结束1 * /

  / * MCU配置------------------ -------------------------------------- * /

  / *重置所有外设,初始化闪存界面和Systick。* /
  HAL_Init();

  / *用户代码开始Init * /

  / *用户代码结束Init * /

  / *配置系统时钟* /
  SystemClock_Config();

  / *用户代码开始SysInit * /

  / *用户代码结束SysInit * /

  / *初始化所有已配置的外围设备* /
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  / *用户代码开始2 * /
        HAL_UART_Receive_IT(&huart2,Rxbuf,sizeof(Rxbuf));
  / *用户代码结尾2 * /

  / *无限循环* /
  / *用户代码开始时* /
  而(1)
  {
               
    / *用户代码结束时* /

    / *用户代码开始3 * /
  }
  / *用户代码结束3 * /
}

/ **
  * @简要系统时钟配置
  * @retval无
  * /
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  / **配置主内部稳压器输出电压
  * /
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  / **根据
  RCC_OscInitTypeDef结构中的指定参数*初始化RCC振荡器。
  * /
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  如果(HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
  {
    Error_Handler();
  }
  / **初始化CPU,AHB和APB总线时钟
  * /
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
                              | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  如果(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_5)!= HAL_OK)
  {
    Error_Handler();
  }
}

/ *用户代码开始4 * /
  void HAL_UART_RxcpltCallback(UART_HandleTypeDef * UartHandle)
        {
                if(UartHandle-> Instance == USART2)
                {
                        HAL_UART_Receive_IT(&huart2,Rxbuf,sizeof(Rxbuf));
                        HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_9);
                        HAL_Delay(500);
                }
        }
/ *用户代码  结尾4 * /

/ **
* @brief发生错误时执行此功能。
  * @retval无
  * /
void Error_Handler(void)
{
  / *用户代码开始Error_Handler_Debug * /
  / *用户可以添加自己的实现以报告HAL错误返回状态* /

  / *用户代码结束Error_Handler_Debug * /
}

#ifdef USE_FULL_ASSERT
/ **
  * @brief报告
  发生assert_param错误的源文件的名称和源行号*。
  * @param文件:指向源文件名的指针
  * @param行:assert_param错误行源编号
  * @retval无
  * /
void assert_failed(uint8_t * file,uint32_t行)
{
  / *用户代码开头6 * /
  / *用户可以添加他自己的实现以报告文件名和行号,
     tex:printf(“错误的参数值:%d \ r \ n行上的文件%s”,文件行)* /
  / *用户代码结尾6 * /
}
#endif / * USE_FULL_ASSERT * /

/ ************************(C)版权STMicroelectronics *****文件结尾**** /


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表