金牌会员
 
- 积分
- 1790
- 金钱
- 1790
- 注册时间
- 2018-3-26
- 在线时间
- 294 小时
|
本帖最后由 htao 于 2019-11-28 16:35 编辑
硬件串口3 Tx Rx短接,串口1 接电脑控制。
话不多说,上代码
主函数
- int main(void)
- {
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- uart1_init(115200); //串口初始化为115200
- uart3_init(115200);
- gpio_init(); //初始化PB0
- u8 aa[] = "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 ";
- while(1)
- {
- if(USART1_RX_STA&0x8000)
- {
- if (USART1_RX_BUF[0] == 0x61)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_0);
- USART3_Send_Data(aa,sizeof(aa));
- GPIO_ResetBits(GPIOB,GPIO_Pin_0);
- }
-
- memset(USART1_RX_BUF,0,sizeof(USART1_RX_BUF));
- USART1_RX_STA = 0;
- }
-
- if(USART3_RX_STA)
- {
-
- USART1_Send_Data(USART3_RX_BUF,USART3_RX_STA);
- printf("recv len = %d\r\n",USART3_RX_STA);
- USART3_RX_STA = 0;
- }
- }
- }
复制代码 中断3处理函数
- void USART3_IRQHandler(void) //串口2中断服务程序
- {
- u8 Res;
- if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
- {
- Res =USART_ReceiveData(USART3); //读取接收到的数据
-
- USART3_RX_BUF[(USART3_RX_STA++)%USART3_REC_LEN]=Res ;
-
-
- // if((USART3_RX_STA&0x8000)==0)//接收未完成
- // {
- // if(USART3_RX_STA&0x4000)//接收到了0x0d
- // {
- // if(Res!=0x0a)USART3_RX_STA=0;//接收错误,重新开始
- // else
- // {
- // USART3_RX_STA|=0x8000; //接收完成了
- // }
- // }
- // else //还没收到0X0D
- // {
- // if(Res==0x0d)USART3_RX_STA|=0x4000;
- // else
- // {
- // USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ;
- // USART3_RX_STA++;
- // if(USART3_RX_STA>(USART3_REC_LEN-1))USART3_RX_STA=0;//接收数据错误,重新开始接收
- // }
- // }
- // }
- }
- }
复制代码
然后上示波器,接上PB0和GND,设置为触发模式,
点击确认,设置好,再用串口1 发送个 a (0x61)过去,上图
看到了串口1 的数据回显,再看看示波器,
示波器显示10ms不到。。。完成
|
|