初级会员

- 积分
- 96
- 金钱
- 96
- 注册时间
- 2019-9-29
- 在线时间
- 19 小时
|

楼主 |
发表于 2021-4-10 14:34:17
|
显示全部楼层
void usa1_init()
{
GPIO_InitTypeDef usa1_io_init;
USART_InitTypeDef usa1_usart_init;
NVIC_InitTypeDef usa1_nvic_init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);
//PA9 TX 复用推挽输出
usa1_io_init.GPIO_Mode=GPIO_Mode_AF_PP;
usa1_io_init.GPIO_Pin=GPIO_Pin_9;
usa1_io_init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&usa1_io_init);
//PA10 RX 浮空输入
usa1_io_init.GPIO_Mode=GPIO_Mode_IN_FLOATING;
usa1_io_init.GPIO_Pin=GPIO_Pin_10;
usa1_io_init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&usa1_io_init);
//串口1配置
usa1_usart_init.USART_BaudRate=115200;
usa1_usart_init.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
usa1_usart_init.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
usa1_usart_init.USART_Parity=USART_Parity_No;
usa1_usart_init.USART_StopBits=USART_StopBits_1;
usa1_usart_init.USART_WordLength=USART_WordLength_8b;
//nvic配置
usa1_nvic_init.NVIC_IRQChannel=USART1_IRQn; //串口1中断通道
usa1_nvic_init.NVIC_IRQChannelCmd=ENABLE;
usa1_nvic_init.NVIC_IRQChannelPreemptionPriority=2; //抢占优先级2
usa1_nvic_init.NVIC_IRQChannelSubPriority=1; //抢断优先级
NVIC_Init(&usa1_nvic_init);
USART_Init(USART1, &usa1_usart_init); //串口1初始化
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //串口1接受中断开
USART_Cmd(USART1, ENABLE); //串口1使能
}
void USART1_IRQHandler(void)
{
u8 usart1;
if(USART_GetITStatus(USART1, USART_IT_RXNE)!=RESET)
{
usart1=USART_ReceiveData(USART1);
if(usart1_ok!=0xc0) //接收未完成
{
if((usart1_ok&0x40)) //接收0x0d,标识为0100 0000,即接收到了0x0d
{
if(usart1==0x0a)
{
//usart1_f=0;
usart1_ok|=0x80; //接收到0x0a,结束,标识1000 0000
usart1_f=0;
}
else
{
usart1_f=0; //未接收到0x0a,接收失败,清零
usart1_ok=0;
}
}
else //未接收0x0d
{
if(usart1==0x0d)
usart1_ok|=0x40; //接收到0x0d 标识0100 0000
else //
{
usart1_rx[usart1_f]=usart1; //将接收到的数据保存,&03f为将标识位去除
usart1_f++;
if(usart1_f>19)
{
usart1_f=0; //当接收数据超过60时,接收错误,清零
usart1_ok=0;
}
}
}
}
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
void usa1_chuli()
{
if(usart1_ok==0xc0)
{
if(usart1_rx[0]==1)
{
sj[0]=usart1_rx[1];
sj[1]=usart1_rx[2];
//sj[2]=usart1_rx[1];
}
if(usart1_rx[0]==2)
{
dinshi_kg=usart1_rx[1];
ds_kai[0]=usart1_rx[7];
ds_kai[1]=usart1_rx[6];
ds_guan[0]=usart1_rx[5];
ds_guan[1]=usart1_rx[4];
}
usart1_ok=0;
}
} |
|