USART.C- #include "stm32f10x.h"
- #include "usart.h"
- void usart_init(void) //串口初始化
- {
- GPIO_InitTypeDef GPIO_initstructure;
- USART_InitTypeDef USART_initstructure;
- NVIC_InitTypeDef Nvic_Init;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置中断组为中断组2 misc.h
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //配置中断复用时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
-
-
- //配置PA9 TX
- GPIO_initstructure.GPIO_Mode =GPIO_Mode_AF_PP; //推挽输出
- GPIO_initstructure.GPIO_Pin =GPIO_Pin_9;
- GPIO_initstructure.GPIO_Speed =GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_initstructure);
- //配置PA10 RX
- GPIO_initstructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //浮空输入
- GPIO_initstructure.GPIO_Pin =GPIO_Pin_10;
-
- GPIO_Init(GPIOA,&GPIO_initstructure);
-
- //串口1打开
- USART_initstructure.USART_BaudRate=115200; //波特率
- USART_initstructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
- USART_initstructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
- USART_initstructure.USART_Parity=USART_Parity_No; //校验位
- USART_initstructure.USART_StopBits= USART_StopBits_1; //停止位
- USART_initstructure.USART_WordLength= USART_WordLength_8b; //有效字节长度 8位
- USART_Init(USART1,&USART_initstructure);
- //使能串口1
- USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //串口中断配置
- USART_Cmd(USART1,ENABLE);
-
- //配置中断
-
-
- Nvic_Init.NVIC_IRQChannel =USART1_IRQn; //设置中断通道 stm32f10x.h
- Nvic_Init.NVIC_IRQChannelCmd =ENABLE; //控制是否使能
- Nvic_Init.NVIC_IRQChannelPreemptionPriority =1; //设置抢占优先级
- Nvic_Init.NVIC_IRQChannelSubPriority =1; //设置子优先级
-
- NVIC_Init(&Nvic_Init);
- }
- //发送单个字符 调用方法 USARTSendByte(USART1,'o');
- void USARTSendByte(USART_TypeDef* USARTx, uint16_t Data){
- USART_SendData(USART1,Data);
- while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); //判断是否发送完成
-
- }
- //发送字符串 //原理字符发送最后一位是\0判断是否最后一位\0就能发送字符串 调用方法 USARTSendStr(USART1,"ruanzebin");
- void USARTSendStr(USART_TypeDef* USARTx, char *str){
- uint16_t i=0; //无符号整形十六位
-
- do{
-
- USARTSendByte(USARTx, *(str+i));
- i++;
-
-
- }while(*(str+i)!='\0');
- while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); //判断是否发送完成
- }
- //printf 函数 putchar函数(输出单个字符) 通过重定向 输出数值
- int fputc(int ch ,FILE *f){
- USART_SendData(USART1,(uint8_t)ch);
- while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); //判断是否发送完成
- return (ch);
- }
- //scanf() getchar函数
- int fgetc(FILE *f)
- {
-
- while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)==RESET); //判断是否接收成功
- return (int)USART_ReceiveData(USART1);
- }
|