因为DSP芯片的资源有限,现在需要用IO来模拟串口进行通信,对DSP不熟,就用STM32先来试一下,刚写了一段代码如下:
void Delay(uint32 num) { while(num--); }
//PB0 模拟 串口的发送管脚 void IO_Uart_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_0); // 初始化为高 } //IO模拟串口发送一个字节的数据 void IO_Uart_SendByte(uint8 data) { static uint16 j=63; // 波特率115200 // j++; OS_CPU_SR cpu_sr; OS_ENTER_CRITICAL(); uint8 i=8; GPIO_ResetBits(GPIOB,GPIO_Pin_0); //起始位 Delay(j); while(i--) //8个数据位 { if(data&0x01==1) { GPIO_SetBits(GPIOB,GPIO_Pin_0); } else { GPIO_ResetBits(GPIOB,GPIO_Pin_0); } Delay(j); data=data>>1; } GPIO_SetBits(GPIOB,GPIO_Pin_0); //停止位 Delay(j); OS_EXIT_CRITICAL(); } /**************************************************************************** *函数名称:void Usart3_task(void *p_arg) *函数功能:串口3 的通讯任务 作为主机 与DSP进行通讯 *日期:2014 9 *版本:V1.0 *作者:yrj *串口3 作为主机与DSP进行通讯 ****************************************************************************/ static void Usart3_task(void *p_arg) { IO_Uart_Init(); //IO模拟串口初始化 while(1) { IO_Uart_SendByte(0x55); //IO模拟串口发送 OSTimeDlyHMSM(0,0,0,500); } } 用示波器抓去了管脚的波形,并且与真实的串口做了对比,波特率近乎一致,但是调试助手接收不到数据。检查了我用的USB转串口线没问题,一时无从下手了。。。