OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4355|回复: 4

关于GPIO模拟串口UART通信

[复制链接]

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2021-11-2
在线时间
2 小时
发表于 2022-7-23 00:34:03 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 YANGWENSONG 于 2022-7-23 00:38 编辑

有没有大哥们写过这个GPIO模拟串口通信的问题这个是基于STM32F407ZGT6的板子写的
不知道为什么串口助手是收不到任何信息的,但是我的灯是一直亮的,我也不清楚就是哪个位置出现了问题。

下面是我的头文件的定义GPIO_TX_RX.h
#ifndef __GPIO_TX_RX_H
#define __GPIO_TX_RX_H

void GPIO_TX_Init(void);
void GPIO_RX_Init(void);



#endif

然后是GPIO_TX_RX.c
#include "stm32f4xx.h"
#include "delay.h"
#include "GPIO_TX_RX.h"

GPIO_InitTypeDef GPIO_InitStruction;
void GPIO_TX_Init()
{

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
        
        
        GPIO_InitStruction.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStruction.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStruction.GPIO_Pin=GPIO_Pin_9;
        GPIO_InitStruction.GPIO_PuPd=GPIO_PuPd_UP;
        GPIO_InitStruction.GPIO_Speed=GPIO_Speed_100MHz;
        
        GPIO_Init(GPIOF,&GPIO_InitStruction);
        GPIO_SetBits(GPIOF,GPIO_Pin_9);
}
void GPIO_RX_Init()
{
        GPIO_InitStruction.GPIO_Mode=GPIO_Mode_IN;
        GPIO_InitStruction.GPIO_Pin=GPIO_Pin_10;
        GPIO_InitStruction.GPIO_PuPd=GPIO_PuPd_UP;
        GPIO_InitStruction.GPIO_Speed=GPIO_Speed_100MHz;
        
        GPIO_Init(GPIOF,&GPIO_InitStruction);
        GPIO_SetBits(GPIOF,GPIO_Pin_10);
}



最后是主函数main
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "GPIO_TX_RX.h"


#define TX_H GPIO_SetBits(GPIOF,GPIO_Pin_9)   //灯灭
#define TX_L GPIO_ResetBits(GPIOF,GPIO_Pin_9)   //灯亮

#define READ_LEVEL (GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_12))    //读取电平

u8 txbuf[7] ="welcome";
u8 cnt;
u8 readata,i;

void Uart_tx_one_byte (u8 date)
{
        int i;
        
        TX_L;
        delay_us(104);
        
        for(i=0;i<8;i++)
        {
                if(date&(0x01<<i))
                {
                        TX_H;
                }
                else
                {
                        TX_L;
                }
                delay_us(104);
        }
        
        TX_H;
        delay_us(104);
}

//void Uart_tx_bytes(u8 *pdata ,u8 len)
//{
//        u8 i;
//        for(i=0;i<len;i++)
//        {
//                Uart_tx_one_byte(*(pdata+i));
//        }
//}

u8 UART_RX(void)
{
        cnt=READ_LEVEL;
        if(cnt==0)
        {
                delay_us(10);
                if(!READ_LEVEL)
                {
                        for(i=0;i<8;i++)
                        {
                                delay_ms(100);
                                readata = readata|(READ_LEVEL<<i);

                        }
                        delay_us(100);
                        if(READ_LEVEL)
                        {
                                return 0;
                        }
                        else
                        {
                                return 0xff;
                        }
                }
                else
                {
                        return 0xff;
                }
        }
        else
        {
                return 0xff;
        }
}




int main(void)
{
        delay_init(168);
        GPIO_TX_Init();//TX端IO口初始化//
        GPIO_RX_Init();//RX端IO口初始化//
        //uart_init(9600);
        while(1)
        {
                delay_us(50);
               
                          Uart_tx_one_byte (0x01);
               

        }
}





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-7-23 10:02:59 | 显示全部楼层
直接代码上看没看出来啥,直接试试示波器抓一下波形看看,或者仿真看下是否能进入到接收状态
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2021-11-2
在线时间
2 小时
 楼主| 发表于 2022-7-23 11:30:13 | 显示全部楼层
狼里个狼121 发表于 2022-7-23 10:02
直接代码上看没看出来啥,直接试试示波器抓一下波形看看,或者仿真看下是否能进入到接收状态

我的板子上的灯是亮的,应该就是TX_L一直在起作用但是我看着调试助手,他没反应
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6719
金钱
6719
注册时间
2017-4-12
在线时间
1257 小时
发表于 2022-7-24 17:55:32 | 显示全部楼层
示波器抓波形,起始位、停止位、数据之间的时间按照你的波特率换算看看对不对
回复

使用道具 举报

11

主题

2130

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4724
金钱
4724
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-7-26 16:41:11 | 显示全部楼层
写过L1的模拟串口,需要参考吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 12:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表