这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 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 跳转至

回复

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