STM32 IO口模拟串口发送接收

环境:
-使用STM32F103CBT6
-使用72M时钟,
-波特率9600、数据位8、停止位1、无校验
接收使用外部中断接收数据
文件为keil工程文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用STM32IO模拟串口发送接收程序的示例代码: ```c #include "stm32f10x.h" #define UART_TX GPIO_Pin_0 #define UART_RX GPIO_Pin_1 #define TX_PORT GPIOA #define RX_PORT GPIOA #define BAUD_RATE 9600 void delay_us(uint32_t us) { uint32_t i = 0; for(i = 0; i < us * 8; i++); } void delay_ms(uint32_t ms) { uint32_t i = 0; for(i = 0; i < ms * 8000; i++); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = UART_TX; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TX_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = UART_RX; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(RX_PORT, &GPIO_InitStructure); } void USART_SendByte(uint8_t byte) { uint8_t i = 0; GPIO_ResetBits(TX_PORT, UART_TX); delay_us(1000000 / BAUD_RATE); for(i = 0; i < 8; i++) { if(byte & 0x01) { GPIO_SetBits(TX_PORT, UART_TX); } else { GPIO_ResetBits(TX_PORT, UART_TX); } byte >>= 1; delay_us(1000000 / BAUD_RATE); } GPIO_SetBits(TX_PORT, UART_TX); delay_us(1000000 / BAUD_RATE); } uint8_t USART_ReceiveByte(void) { uint8_t byte = 0; uint8_t i = 0; while(GPIO_ReadInputDataBit(RX_PORT, UART_RX) == Bit_RESET); delay_us(1000000 / BAUD_RATE / 2); for(i = 0; i < 8; i++) { byte >>= 1; if(GPIO_ReadInputDataBit(RX_PORT, UART_RX) == Bit_SET) { byte |= 0x80; } delay_us(1000000 / BAUD_RATE); } return byte; } int main(void) { uint8_t data = 0; GPIO_Configuration(); while(1) { USART_SendByte(0xAA); delay_ms(1000); data = USART_ReceiveByte(); } } ``` 在这个例子中,我们使用PA0和PA1两个IO分别模拟串口发送接收。首先我们需要配置GPIO的模式和速度,然后使用USART_SendByte函数向串口发送一个字节,使用USART_ReceiveByte函数从串口接收一个字节。在发送一个字节时,我们先将TX设置为低电平,然后延时一段时间,然后依次发送8个位,每个位之间都需要延时一段时间,最后将TX设置为高电平。在接收一个字节时,我们首先等待RX为高电平,然后延时一半的位时间,依次接收8个位,每个位之间都需要延时一段时间,并将接收到的位组合成一个字节返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值