历史上的今天
返回首页

历史上的今天

今天是:2025年08月07日(星期四)

正在发生

2019年08月07日 | USART配置 STM32cubemx配置USART

2019-08-07 来源:eefocus

目录:


1.软件


2.程序


3.使用STM32CubxMX配置USART


4,.介绍程序的实现


一、软件: 


(1)STM32CubeMX 

(2)KEIL5


硬件平台主IC:STM32F412RET6


二,见程序:main.c部分程序


#include "main.h"

#include "stm32f4xx_hal.h"

#include "usart.h"

#include "gpio.h"

 

#define led0_1  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET)

#define led1_1  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET)//IO口高电平输出

#define led2_1  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET)//IO口高电平输出

  

#define led0_0  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET)

#define led1_0  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET)//IO口低电平输出

#define led2_0  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET)//IO口高电平输出

 

void Delay_Nus(uint32_t t)//us延时

uint8_t i;

while(t--)

{

i=25;

while(i--);

}

}

 

void Delay_Nms(uint32_t t)//ms延时

{

  while(t--)

  {

    Delay_Nus(1000);

  }

}

 

void SystemClock_Config(void);

 

uint8_t aRxBuffer[20]; 

int main(void)

{

  uint8_t aTxStartMessages[] = "rnPlease enter 10 characters:rn";  

  HAL_Init();

  SystemClock_Config();//时钟

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  while (1)

  {

    HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //发送函数

    HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10); //接收函数 

      led1_0;

      Delay_Nms(40);

      led1_1;

      Delay_Nms(40);

  }

}

 

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  

{  

    UNUSED(huart);  

    HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时间  

}  

 

void SystemClock_Config(void)//系统时钟

{

  RCC_OscInitTypeDef RCC_OscInitStruct;

  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Configure the main internal regulator output voltage 

    */

  __HAL_RCC_PWR_CLK_ENABLE();

 

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

 

    /**Initializes the CPU, AHB and APB busses clocks 

    */

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

  RCC_OscInitStruct.HSIState = RCC_HSI_ON;

  RCC_OscInitStruct.HSICalibrationValue = 16;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

    /**Initializes the CPU, AHB and APB busses clocks 

    */

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

 

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }

 

    /**Configure the Systick interrupt time 

    */

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

 

    /**Configure the Systick 

    */

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

 

  /* SysTick_IRQn interrupt configuration */

  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

}

/**

  * @brief  This function is executed in case of error occurrence.

  * @param  None

  * @retval None

  */

void _Error_Handler(char * file, int line)

{

  /* USER CODE BEGIN Error_Handler_Debug */

  /* User can add his own implementation to report the HAL error return state */

  while(1) 

  {

  }

  /* USER CODE END Error_Handler_Debug */ 

}

 

#ifdef USE_FULL_ASSERT

 

/**

   * @brief Reports the name of the source file and the source line number

   * where the assert_param error has occurred.

   * @param file: pointer to the source file name

   * @param line: assert_param error line source number

   * @retval None

   */

void assert_failed(uint8_t* file, uint32_t line)

{

  /* USER CODE BEGIN 6 */

  /* User can add his own implementation to report the file name and line number,

    ex: printf("Wrong parameters value: file %s on line %drn", file, line) */

  /* USER CODE END 6 */

}

#endif

三.使用STM32CubxMX配置USART


    先配置时钟,在配置USART,配置IO口,最后设置好并输出.


1.配置时钟(结合实际情况配置)



配置IO口为输出模式。

2.配置USART

修改波特率和打开USART中断


修改IO口输出模式为高速,上拉输出


3.输出设置,选择对应的编译器


四.介绍程序的实现


1.USART的实现


uint8_t aRxBuffer[20];

uint8_t aTxStartMessages[] = "rnPlease enter 10 characters:rn";

HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //s发送

    HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);  //接收

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  //放在main()函数下面就可以,把接受到的内容回发

{  

    UNUSED(huart);  

    HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时间  

}  

2.IO口驱动外设


#define led0_1  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET)

#define led1_1  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET)//IO口高电平输出

#define led2_1  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_SET)//IO口高电平输出

  

#define led0_0  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET)

#define led1_0  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET)//IO口低电平输出

#define led2_0  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET)//IO口高电平输出

3.延时函数


void Delay_Nus(uint32_t t)//us延时

uint8_t i;

while(t--)

{

i=25;

while(i--);

}

}

void Delay_Nms(uint32_t t)//ms延时

{

  while(t--)

  {

    Delay_Nus(1000);

  }

}


推荐阅读

史海拾趣

APEM公司的发展小趣事

APEM公司的创始人基恩·罗杰罗,在20世纪50年代初,看到了美国产品主导法国市场的商机。为了解决产品维修和备件订购的难题,他决定自己生产开关。罗杰罗的开关产品在尺寸和操作方式上与美国产品相似,但价格更亲民,交货时间更短。这一创新举措使APEM迅速在市场上站稳脚跟,为后续的发展奠定了坚实基础。

Hirose公司的发展小趣事

APEM公司的创始人基恩·罗杰罗,在20世纪50年代初,看到了美国产品主导法国市场的商机。为了解决产品维修和备件订购的难题,他决定自己生产开关。罗杰罗的开关产品在尺寸和操作方式上与美国产品相似,但价格更亲民,交货时间更短。这一创新举措使APEM迅速在市场上站稳脚跟,为后续的发展奠定了坚实基础。

Dielectric Laboratories公司的发展小趣事

随着电子行业的不断发展,市场对电子元件的需求也在不断变化。为了适应这一变化,DLI不断调整产品战略,推出了更多符合市场需求的新产品。例如,针对商业和工业领域的需求,DLI研发了具有高性能、高可靠性特点的MLCC产品,并成功打开了市场。此外,公司还不断加大研发投入,探索新的技术领域,以保持其在行业中的领先地位。

COMPUTAR公司的发展小趣事

随着技术的不断进步和市场需求的扩大,CBC株式会社开始寻求更广阔的发展空间。1960年,CBC香港公司成立,这标志着CBC的镜头产品开始走向国际市场。香港作为当时亚洲的金融中心和贸易枢纽,为CBC提供了宝贵的国际资源和市场机遇。通过香港公司的努力,CBC的镜头产品逐渐在国际市场上获得认可。

Califia Lighting公司的发展小趣事

Califia Lighting公司的创立源于创始人对节能照明技术的深刻理解和前瞻视野。在电子照明行业快速发展的背景下,他们看到了LED照明技术的巨大潜力,并决定投身其中。凭借对技术的热爱和对市场的敏锐洞察,Califia Lighting成功研发出了一系列高性能的LED灯具和模块,为公司的起步奠定了坚实的基础。

H&D Wireless公司的发展小趣事

随着全球化进程的加速,高创也开始了其全球化布局的步伐。除了在以色列和中国设立研发中心外,高创还积极拓展国际市场,与全球多个国家和地区的客户建立了长期合作关系。通过参加国际知名展会如汉诺威工业博览会等,高创不仅展示了其最新技术和产品,还加强了与国际同行的交流与合作,进一步提升了其国际知名度和影响力。

问答坊 | AI 解惑

LPC1114的Flash读写操作问题及解决办法

使用LPC1114的Flash时遇到些问题,特向各位请教。   (1)LPC1114的Flash是不是每次读写最少得256字节,而不可以一个字节一个字节的进行读写操作? (2)我现在想把一个数组(比较小)的数据随时存储到片内Flash中,并且可以随时读取,是 ...…

查看全部问答>

evc4.0如何通过网络联机调试?

设备:S3C2440开发板 装的是WindowsCE.net系统 程序开发机:WindowsXP装有EVC4.0和ActiveSync 1:ActiveSync连接开发板有什么要求? 2:若不用ActiveSync那么在EVC4.0中如何设置进行网络连接调试? 3:在创建eVC工程的时候需要选择CPUs 但是 ...…

查看全部问答>

流明学习笔记之九网络远程控制开发板成功

我终于实现了远程控制,这和我的申请题目基上实现了,但还差得很远,最起码这个例程还没彻底吃透,还得钻研一阵子哈!        费话少说,归正题。        每个人每天上网的IP都是不 ...…

查看全部问答>

msp430f2618驱动ocmj15x20d

我怎么弄液晶屏都没什么反应。。。。求大家给点建议…

查看全部问答>

MSP430串口的硬件数据流控制怎么实现

MSP430串口的硬件数据流控制怎么实现啊,我用的是MSP430F5510,并未看到硬件流控制引脚,是否可用MOSI MISO引脚来实现呢?…

查看全部问答>

G网8口手机激活仪,8口SIM激卡器 ,支持改串码

型号:TY—ROWU8j 产品说明: USB八口激卡器,可以连接笔记本电脑的激卡器,只须一根USB数据线连接到电脑,安装一个USB的驱动程序,激卡器内置扩展芯片即可扩展出8个COM口来,效果和串口的设备一样稳定,操作和串口的设备一样简单! 激卡器,是 ...…

查看全部问答>

请问有谁能告诉我团购那个TMP006 大小是多大?就是BGA封装那个

本帖最后由 dontium 于 2015-1-23 13:11 编辑 只从手册中看到2个BGA焊盘的间距是0.5MM. 焊盘的大小我用的是11mil 但是现在不知道这个芯片的尺寸.. 只有2MM*2MM??????????? …

查看全部问答>

ATMEGA16A,用循环制作数字时钟程序

#include \"iom16v.h\" #include \"macros.h\" #define uchar unsigned char #define uint unsigned int uint Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,}; void delay(uint ms) {    uint i,j;   ...…

查看全部问答>

2602型数字源表测试脚本及两个典型命令

从传统意义上讲,测试工程师将进行测试编程,并将其输入计算机或其他控制器。这类程序可能包括测试执行程序以及函数程序与其他子程序。执行程序通过以适当的顺序来调用不同的函数或子程序,从而控制测试流程。函数和子程序通过向测试系统中的仪器 ...…

查看全部问答>

【玩游戏,体验易电源心得】

先庆祝一下,得了100分,上图。 对易电源的体验心得:   易电源体积小,节省空间;   功能很强大,效率高;   外电路非常简单,易于实现;   设计使用简单,容易上手,还有专门的设计工具WEBENCH ...…

查看全部问答>