利用labview与c语言中断方式分别实现串口仪器控制
利用labview实现串口仪器控制在之前已经写过,参考之前的两篇帖子
1、https://blog.****.net/li_little7/article/details/83860470
2、https://blog.****.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);//持续循环等待中断
}
实验如下:将代码写入单片机之后,利用串口调试助手向单片机传输数据,就会读取到单片机接收到的数据。