stm32f103rc软件开发 (2) 串口操作

2025-10-30 15:13:13

1、下面贴的是主函数,做的就是将串口1进行配置,配置成中断的方式然后while 1

int main(void)

{

  /* System Clocks Configuration */

  RCC_Configuration();

       

  /* NVIC configuration */

  NVIC_Configuration();

  /* Configure the GPIO ports */

  GPIO_Configuration();

  USART_InitStructure.USART_BaudRate = 9600;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No;

  USART_InitStructure.USART_HardwareFlowControl =  USART_HardwareFlowControl_None;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* Configure USART1 */

  USART_Init(USART1, &USART_InitStructure);

  

  /* Enable USART1 Receive and Transmit interrupts */

  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  

  /* Enable the USART1 */

  USART_Cmd(USART1, ENABLE);

  while (1)

  {

  }

}

2、RCC的配置如下

void RCC_Configuration(void)

{

  SystemInit();

  

  /* Enable USART1, GPIOA, GPIOx and AFIO clocks */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA  | RCC_APB2Periph_AFIO, ENABLE);

}

串口1是PA9 PA10所以要打开 RCC_APB2Periph_GPIOA 

用到串口1要打开RCC_APB2Periph_USART1 

串口1是复用功能要打开RCC_APB2Periph_AFIO

stm32f103rc软件开发 (2) 串口操作

3、GPIO的设置

void GPIO_Configuration(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure USART1 Rx (PA.10) as input floating */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  

  /* Configure USART1 Tx (PA.09) as alternate function push-pull */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

}

只用到串口1 配置 PA9为输入因为是串口收   PA10为输出因为是串口发送

stm32f103rc软件开发 (2) 串口操作

4、中断的配置

void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure the NVIC Preemption Priority Bits */  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  

  /* Enable the USART1 Interrupt */

  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

stm32f103rc软件开发 (2) 串口操作

5、串口中断的函数编写  stm32f10x_it.c文件中

void USART1_IRQHandler(void)

{

  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

  {

    /* Read one byte from the receive data register */

    RxBuffer1[0] = USART_ReceiveData(USART1);

   if(USART_GetITStatus(USART1, USART_IT_TXE) == RESET)

   {

         USART_SendData(USART1, RxBuffer1[0]);

    }

}

这里做了一个读一个data然后将这个data发送出去。即收到什么发送什么。

测试时可以将stm32通过TTL转232芯片连在电脑上,电脑端打开串口工具进行发送一个data的测试。看看是否可以收回这个相同的data。

stm32f103rc软件开发 (2) 串口操作

stm32f103rc软件开发 (2) 串口操作

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢