当前位置:   article > 正文

STM32 F103C8T6学习笔记3:串口配置—串口收发—自定义Printf函数_stm32f030c8t6串口2

stm32f030c8t6串口2

今日学习使用STM32 C8T6的串口,我们在经过学习笔记2的总结归纳可知,STM32 C8T6最小系统板上有三路串口,如下图:

 今日我们就着手学习如何配置开通这些串口进行收发,这里不讲串口通信概念与基础,可以自行网上查找,本文直接开始介绍库函数与编程实现:

串口配置相关库函数介绍:

 

打开串口GPIO的时钟:

  1. void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
  2. /*
  3. #define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)
  4. #define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)
  5. #define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)
  6. #define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020)
  7. #define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040)
  8. #define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080)
  9. #define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)
  10. */

 

打开串口外设的时钟:

  1. void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
  2. /*
  3. #define RCC_APB2Periph_USART1 ((uint32_t)0x00004000)
  4. #define RCC_APB1Periph_USART2 ((uint32_t)0x00020000)
  5. #define RCC_APB1Periph_USART3 ((uint32_t)0x00040000)
  6. #define RCC_APB1Periph_UART4 ((uint32_t)0x00080000)
  7. #define RCC_APB1Periph_UART5 ((uint32_t)0x00100000)
  8. */

 

串口的初始化配置:

  1. void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
  2. /*
  3. USART1 USART2 USART3
  4. */

 

向量中断控制器组选择:

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

 

初始化配置NVIC:

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

 

串口接收:

USART_ReceiveData(USART1)

串口配置编程:

首先创建好要用的几个文件.c 与.h,在添加进工程,别忘了添加路径~

 

串口的初始化:

以下是串口1的初始化以及配置中断优先级,中断优先级的配置分为主优先和子优先,有关中断优先级的配置这放在以后再说~~~,

测试工程文件我还编写了串口2,3的初始化,可以下载测试观察~

  1. #include "USART_init.h"
  2. void Usart1_Init(unsigned int baud)
  3. {
  4. GPIO_InitTypeDef gpio_initstruct;
  5. USART_InitTypeDef usart_initstruct;
  6. NVIC_InitTypeDef nvic_initstruct;
  7. // 打开串口GPIO的时钟
  8. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  9. // 打开串口外设的时钟
  10. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  11. //PA9 TXD // 将USART Tx的GPIO配置为推挽复用模式
  12. gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;
  13. gpio_initstruct.GPIO_Pin = GPIO_Pin_9;
  14. gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
  15. GPIO_Init(GPIOA, &gpio_initstruct);
  16. //PA10 RXD // 将USART Rx的GPIO配置为浮空输入模式
  17. gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  18. gpio_initstruct.GPIO_Pin = GPIO_Pin_10;
  19. gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
  20. GPIO_Init(GPIOA, &gpio_initstruct);
  21. usart_initstruct.USART_BaudRate = baud; //配置波特率
  22. usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
  23. usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //接收和发送
  24. usart_initstruct.USART_Parity = USART_Parity_No; //无校验
  25. usart_initstruct.USART_StopBits = USART_StopBits_1; //配置停止位 1位停止位
  26. usart_initstruct.USART_WordLength = USART_WordLength_8b; //配置 针数据字长 8位数据位
  27. // 完成串口的初始化配置
  28. USART_Init(USART1, &usart_initstruct);
  29. USART_Cmd(USART1, ENABLE); //使能串口
  30. USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收中断
  31. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 嵌套向量中断控制器组选择 */
  32. nvic_initstruct.NVIC_IRQChannel = USART1_IRQn; /* 配置USART为中断源 */
  33. nvic_initstruct.NVIC_IRQChannelCmd = ENABLE; /* 使能中断 */
  34. nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0; /* 抢断优先级*/
  35. nvic_initstruct.NVIC_IRQChannelSubPriority = 2; /* 子优先级 */
  36. NVIC_Init(&nvic_initstruct); /* 初始化配置NVIC */
  37. }

 

串口中断服务函数的编写:

首先在启动文件找到三个串口的中断服务函数:

  1. void USART1_IRQHandler(void)
  2. {
  3. if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
  4. {USART_ClearFlag(USART1, USART_FLAG_RXNE);}
  5. //返回收到的任意数据
  6. USART_SendData(USART1,USART_ReceiveData(USART1));
  7. }

测试结果截图:

 

工程下载:

https://download.csdn.net/download/qq_64257614/88201777?spm=1001.2014.3001.5503

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/395531
推荐阅读
相关标签
  

闽ICP备14008679号