stm32---usart1与电脑通信
usart.h
#ifndef _USART_H_ #define _USART_H_ #include "stm32f10x.h" #include <stdio.h> //发送一个字节 void GPIO1_Configuration(void); void USART1_Configuration(unsigned long baund); int fputc(int ch, FILE *f); #endif
usart.c
#include "usart.h"
#include "string.h"
//重定义fputc();
//printf("hello world");
int fputc(int ch, FILE *f)
{
USART_SendData(USART1, (uint8_t) ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
return (ch);
}
void USART1_Configuration(unsigned long baund)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //打开APB2总线上的USART1和GPIOA时钟
GPIO_InitTypeDef GPIO_InitStructure;
//设置USART1的Tx引脚(PA.9)为第二功能推挽输出,最大翻转频率为50MHz
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//设置USART1的Rx引脚(PA.10)为浮空输入脚
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //打开APB2总线上的USART1和GPIOA时
USART_InitTypeDef USART_InitStructure; //定义USART初始化结构体USART_InitStructure
//波特率为115200bps;8位数据长度,1个停止位,无检验位;禁用硬件流控制;禁止USART时钟;时钟极性低;在第2个边沿捕获数据;最后一位数据的时钟脉冲不从SCLK输出
USART_InitStructure.USART_BaudRate=baund;
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_Rx|USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1,ENABLE); //使能USART1
NVIC_InitTypeDef USART_NVIC;
USART_NVIC.NVIC_IRQChannel=USART1_IRQn;
USART_NVIC.NVIC_IRQChannelPreemptionPriority=0;
USART_NVIC.NVIC_IRQChannelSubPriority=1;
USART_NVIC.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&USART_NVIC);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
printf("receive...
");
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
}
main.c
#include "usart.h"
void delay_ms(uint32_t ms)
{
uint32_t i_cnt,j_cnt;
for(i_cnt=0;i_cnt<3000;i_cnt++);
for(j_cnt=0;j_cnt<ms;j_cnt++);
}
int main(void)
{
USART1_Configuration(115200);
printf("hello world
");
}
