stm32控制串口打印每一秒打印一次的代码不适用HAL库
时间: 2024-12-24 12:22:32 浏览: 4
STM32控制串口每秒打印一次数据,如果不用HAL库,可以手动操作GPIO和USART寄存器来实现。这是一个基本的示例:
```c
#include "stm32f10x.h"
// 波特率、TX/RX GPIO配置等在这里设置
#define SERIAL_BAUD_RATE 9600
#define USART_GPIO_PORT GPIOA
#define USART_GPIO_PIN GPIO_Pin_9 // PA9作为TX
void init_USART(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 启动GPIOA时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = USART_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(USART_GPIO_PORT, &GPIO_InitStructure);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = SERIAL_BAUD_RATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
}
void send_char(char c) {
while (!USART_GetFlagStatus(USART1, USART_FLAG_TXE)); // 等待发送就绪
USART_SendData(USART1, c); // 发送字符
}
int main(void) {
init_USART();
for (;;) { // 永久循环
static uint32_t last_time = 0;
if (SystemCoreClockGet() - last_time >= 1000000UL) { // 每隔1秒检查时间
printf("%c", 'T'); // 打印字符
last_time = SystemCoreClockGet(); // 更新上一次打印的时间
}
}
return 0;
}
```
阅读全文