这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 大家给看下这个IO模拟串口的代码吧

共4条 1/1 1 跳转至

大家给看下这个IO模拟串口的代码吧

高工
2014-09-15 10:37:09     打赏

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





关键词: IO     模拟串口    

高工
2014-09-15 20:05:02     打赏
2楼
来了两个多月了,今后进城的机会就少了

高工
2014-09-16 19:30:56     打赏
3楼
软件之前就有些问题,win8 64位的系统,跑32位的助手是有些不牢靠

高工
2014-09-16 19:32:12     打赏
4楼
我不需要它一直很稳定的运行下去, 我就是想验证一下,只要能调通,我的任务也就结束了

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]