OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 大家给看下这个IO模拟串口的代码吧

共7条 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 10:41:23    评分
2楼
听说你也移居昌平?

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

专家
2014-09-15 23:34:41    评分
4楼

如果用示波器看到的波形没有问题 就是没有问题。

查看一下上位机串口助手软件。




专家
2014-09-15 23:35:57    评分
5楼

另,串口看似简单,但是用IO模拟起来相当复杂,且稳定性需要深度测试。

在现代资源如此丰富的时代此举实在是欠考虑


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

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

共7条 1/1 1 跳转至

回复

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