mirror of
https://github.com/NanjingForestryUniversity/valveboard.git
synced 2025-11-08 22:34:04 +00:00
91 lines
2.1 KiB
C
91 lines
2.1 KiB
C
#include "usart.h"
|
||
#include "stm32f10x.h"
|
||
#include "sys.h"
|
||
|
||
void uart_init(u32 bound)
|
||
{
|
||
//GPIO端口设置
|
||
GPIO_InitTypeDef GPIO_InitStructure;
|
||
USART_InitTypeDef USART_InitStructure;
|
||
|
||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
|
||
|
||
//USART1_TX GPIOA.9
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
|
||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
|
||
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.9
|
||
|
||
//USART1_RX GPIOA.10初始化
|
||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10
|
||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
|
||
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.10
|
||
|
||
//USART 初始化设置
|
||
|
||
USART_InitStructure.USART_BaudRate = bound; //串口波特率
|
||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式
|
||
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_Init(USART1, &USART_InitStructure); //初始化串口1
|
||
USART_Cmd(USART1, ENABLE); //使能串口1
|
||
}
|
||
|
||
#if defined(__CC_ARM)
|
||
#pragma import(__use_no_semihosting)
|
||
|
||
struct __FILE
|
||
{
|
||
int handle;
|
||
} __stdout;
|
||
|
||
void _sys_exit(int x)
|
||
{
|
||
x = x;
|
||
}
|
||
|
||
void _ttywrch(int ch)
|
||
{
|
||
ch = ch;
|
||
}
|
||
|
||
/**
|
||
* @brief Override fputc in stdlib.
|
||
*/
|
||
int fputc(int ch, FILE *f)
|
||
{
|
||
while ((USART1->SR & 0X40) == 0)
|
||
;
|
||
USART1->DR = (uint8_t)ch;
|
||
return ch;
|
||
}
|
||
#elif defined(__GNUC__)
|
||
#include <errno.h>
|
||
#include <sys/unistd.h> // STDOUT_FILENO, STDERR_FILENO
|
||
|
||
int _write(int file, char *data, int len)
|
||
{
|
||
|
||
if ((file != STDOUT_FILENO) && (file != STDERR_FILENO))
|
||
{
|
||
errno = EBADF;
|
||
return -1;
|
||
}
|
||
int i = len;
|
||
// arbitrary timeout 1000
|
||
while (i--)
|
||
{
|
||
while ((USART1->SR & 0X40) == 0)
|
||
;
|
||
USART1->DR = *data;
|
||
data++;
|
||
}
|
||
|
||
// return # of bytes written - as best we can tell
|
||
return len;
|
||
}
|
||
#endif
|