利用labview与c语言中断方式分别实现串口仪器控制

利用labview实现串口仪器控制在之前已经写过,参考之前的两篇帖子
1、https://blog.csdn.net/li_little7/article/details/83860470
2、https://blog.csdn.net/li_little7/article/details/84030153
这里说一下如何用c语言实现串口仪器控制,道理是一样的,直接开始串口配置过程以stm32f10x单片机系列为例子。
主要分为以下几个过程:
1、串口时钟使能,GPIO时钟使能
2、GPIO端口模式设置即端口初始化,发送端设置为推挽复用输出、接收端设置为浮空或者上拉输入。
3、串口参数初始化
4、开启中断并且初始化
5、使能串口
6、编写中断处理函数
7、串口数据收发:(1)发送数据到串口,DR(2)接受数据,从DR读取接受到的数据
具体程序如下:

#include "stm32f10x.h"
void My_USART1_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStrue;
 USART_InitTypeDef USART_InitStrue;
 NVIC_InitTypeDef NVIC_InitStrue;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能gpio端口时钟
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口1时钟
 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
   GPIO_Init(GPIOA,&GPIO_InitStrue);//端口初始化,设置发送端工作模式为推挽复用,速度为10mhz
 GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
   GPIO_Init(GPIOA,&GPIO_InitStrue);//端口初始化,设置接收端工作模式为浮空输入,速度为10mhz
 USART_InitStrue.USART_BaudRate=115200;
 USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
 USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
 USART_InitStrue.USART_Parity=USART_Parity_No;
 USART_InitStrue.USART_StopBits=USART_StopBits_1;
 USART_InitStrue.USART_WordLength=USART_WordLength_8b;
 USART_Init(USART1,&USART_InitStrue);//初始化串口,设置串口波特率,奇偶校验位等参数
 USART_Cmd(USART1,ENABLE);//使能串口1
 USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断
 NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
 NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
 NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
 NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
 NVIC_Init(&NVIC_InitStrue);//设置中断通道以及中断的抢占优先级和响应优先级
}
void USART1_IRQHandler(void)//中断处理函数
{
 u8 res;
  if(USART_GetITStatus(USART1,USART_IT_RXNE))
 {
     res= USART_ReceiveData(USART1); 
     USART_SendData(USART1,res);   
  }
}
 int main(void)
 { 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断分为2位为抢占优先级,2位为响应优先级
 My_USART1_Init();
  while(1);//持续循环等待中断
 }

实验如下:将代码写入单片机之后,利用串口调试助手向单片机传输数据,就会读取到单片机接收到的数据。
利用labview与c语言中断方式分别实现串口仪器控制