[STM32F4] stm32f407 6个串口dma_stm32F之USART串口通信

[复制链接]
1129|6
 楼主| ym0sly 发表于 2022-12-31 19:55 | 显示全部楼层 |阅读模式
DM, DMA, SAR, ST, STM

​ STM32F407有2个UART(通用异步收发器),4个USART(通用异步/同步收发器)

在STM32F407ZET6的手册上有描述,

515463b0232482e6e.png


 楼主| ym0sly 发表于 2022-12-31 19:56 | 显示全部楼层
这些接口所对应的引脚如下:
9611663b02361328bc.png
 楼主| ym0sly 发表于 2022-12-31 19:57 | 显示全部楼层
在这里我们选用串口1进行简单编程:
实现功能吐下:

每秒发送一个数字
进行数据回传
 楼主| ym0sly 发表于 2022-12-31 19:58 | 显示全部楼层
其所要配置的内容如下:

GPIO的时钟使能
声明一个GPIO结构体变量,进行定义并进行初始化,主要是开启复用功能
将GPIO复用为何,将IO口功能配置为USART功能
USART1的时钟进行使能
声明一个USART结构体变量,进行定义并进行初始化,设置其波特率,停止位,字长,是否硬件流控制,收发模式,
设置中断优先组
声明一个中断优先组变量,进行定义并进行初始化,设置什么为中断源,其抢占优先组,响应优先组的值
配置串口中断源为哪个:是接收中断还是发送中断
使能USART1
 楼主| ym0sly 发表于 2022-12-31 19:58 | 显示全部楼层
  1. int main(void)
  2. {

  3.     //配置systick时钟的时钟源
  4.     SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);

  5.     if(SysTick_Config(SystemCoreClock/1000)!=0)
  6.     {

  7.     }

  8.     //配置中断优先分组
  9.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  10.     //声明一个GPIO结构体变量
  11.     GPIO_InitTypeDef GPIO_InitStructure;
  12.     //声明一个USART结构体变量
  13.     USART_InitTypeDef USART_InitStructure;
  14.     //使能USART1外设时钟
  15.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  16.     //使能GPIO外设时钟   
  17.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  18.     //定义GPIO结构体变量,复用该IO口作为串口
  19.     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9 |GPIO_Pin_10;//两个IO口
  20.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;         //复用模式
  21.     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;    //50MHz
  22.     GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;       //推挽输出
  23.     GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;         //上拉
  24.     GPIO_Init(GPIOA,&GPIO_InitStructure);
  25.     //定义USART结构体变量
  26.     USART_InitStructure.USART_BaudRate=115200;
  27.     USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制   
  28.     USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx; //收发模式
  29.     USART_InitStructure.USART_Parity=USART_Parity_No;    //无校准
  30.     USART_InitStructure.USART_StopBits=USART_StopBits_1; //1位停止位
  31.     USART_InitStructure.USART_WordLength=USART_WordLength_8b;  //字长为8
  32.     //明确IO为何功能进行配置
  33.     GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //
  34.     GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

  35.     //串口进行初始化
  36.     USART_Init(USART1,&USART_InitStructure);
  37.     //串口中断优先组结构体变量声明
  38.     NVIC_InitTypeDef NVIC_InitStructure_usart;
  39.     //定义该串口中断优先组分组
  40.     NVIC_InitStructure_usart.NVIC_IRQChannel=USART1_IRQn;
  41.     NVIC_InitStructure_usart.NVIC_IRQChannelCmd=ENABLE;
  42.     NVIC_InitStructure_usart.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级设置
  43.     NVIC_InitStructure_usart.NVIC_IRQChannelSubPriority=0x02;       //响应优先级设置
  44.     //初始化该优先级分组
  45.     NVIC_Init(&NVIC_InitStructure_usart);

  46.     //配置串口接收中断
  47.     USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
  48.     //使能串口1
  49.     USART_Cmd(USART1,ENABLE);

  50.     while(1)
  51.     {
  52.         //定时发送数据的功能
  53.         USART_SendData(USART1,9);
  54.         delay_sys(1000);

  55.     }

  56. }
  57. //进行数据的回传
  58. void USART1_IRQHandler(void)
  59. {
  60.     u8 res;
  61.     if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否有接收中断
  62.     {
  63.         res=USART_ReceiveData(USART1);
  64.         USART_SendData(USART1,res);
  65.     }

  66. }
  67. //延时功能
  68. int delaytime;
  69. void delay_sys(unsigned int time)
  70. {
  71.         delaytime=time;
  72.     while(delaytime!=0);//延时
  73. }
  74. //systick中的中断函数,对其进行编写
  75. /**
  76.   * [url=home.php?mod=space&uid=247401]@brief[/url]  This function handles SysTick Handler.
  77.   * @param  None
  78.   * @retval None
  79.   */
  80. void SysTick_Handler(void)
  81. {

  82.     if(delaytime!=0)
  83.     {
  84.          delaytime--;
  85.     }
  86. }
 楼主| ym0sly 发表于 2022-12-31 19:59 | 显示全部楼层
最后可以实现所要求的功能, 下载至开发板中测试即可。
Bowclad 发表于 2023-1-1 16:20 | 显示全部楼层
电脑的串口就是RS232的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

330

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部