因为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转串口线没问题,一时无从下手了。。。