stm32f103c8t6的红外发送代码不用hal库
时间: 2023-06-19 14:10:31 浏览: 150
使用红外发送模块可以通过GPIO控制实现,以下是一个使用STM32F103C8T6控制红外发送的代码示例:
```c
#include "stm32f10x.h"
// 定义红外发送的IO口
#define IR_GPIO_PORT GPIOB
#define IR_GPIO_PIN GPIO_Pin_12
void Delay_us(uint32_t us)
{
uint32_t i = 0;
while (us--) {
i = 7;
while (i--);
}
}
// 发送一个高电平信号
void IR_Send_High(void)
{
GPIO_SetBits(IR_GPIO_PORT, IR_GPIO_PIN);
Delay_us(8);
}
// 发送一个低电平信号
void IR_Send_Low(void)
{
GPIO_ResetBits(IR_GPIO_PORT, IR_GPIO_PIN);
Delay_us(4);
}
// 发送一个红外信号
void IR_Send_Data(uint8_t data)
{
uint8_t i = 0;
// 发送红外信号的起始码
IR_Send_High();
IR_Send_Low();
// 发送数据位
for (i = 0; i < 8; i++) {
if (data & 0x01) {
IR_Send_High();
} else {
IR_Send_Low();
}
data >>= 1;
}
// 发送红外信号的停止码
IR_Send_High();
IR_Send_Low();
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 配置红外发送的IO口为推挽输出模式
GPIO_InitStructure.GPIO_Pin = IR_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(IR_GPIO_PORT, &GPIO_InitStructure);
// 发送红外信号
IR_Send_Data(0x55);
while (1);
}
```
在这个例子中,我们通过GPIO控制红外发送模块的输入,实现了发送一个8位的红外信号。需要注意的是,红外信号的具体格式和数据需要根据具体的红外发送模块和接收端协议来确定。例如,NEC红外协议的信号格式为一个起始码、一个停止码和32位数据位,如果需要发送NEC协议的红外信号,则需要根据协议规定发送具体格式的信号。
阅读全文