学习STM32做一个记录
这是一个简单的STM32串口实验
#include "stm32f10x.h"
/*
PA10->RX
PA9->TX
uart1
*/
void UsbUartConfig(){
GPIO_InitTypeDef GPIOdef;
USART_InitTypeDef USARTdef;
NVIC_InitTypeDef NVICdef;
//开启GPIO和串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
GPIOdef.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIOdef.GPIO_Pin = GPIO_Pin_10;
GPIOdef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIOdef);
GPIOdef.GPIO_Mode = GPIO_Mode_AF_PP;
GPIOdef.GPIO_Pin = GPIO_Pin_9;
GPIOdef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIOdef);
//串口设置
USARTdef.USART_BaudRate = 9600;
USARTdef.USART_WordLength = USART_WordLength_8b;
USARTdef.USART_StopBits = USART_StopBits_1;
USARTdef.USART_Parity = USART_Parity_No;
USARTdef.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USARTdef.USART_Mode = USART_Mode_Tx |USART_Mode_Rx;
USART_Init(USART1,&USARTdef);
//中断设置
NVICdef.NVIC_IRQChannel = USART1_IRQn;
NVICdef.NVIC_IRQChannelPreemptionPriority = 1;
NVICdef.NVIC_IRQChannelSubPriority = 1;
NVICdef.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVICdef);
//串口中断设置
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
void InitHardUart(){
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
UsbUartConfig();
}
//发送一个字符
void Usart_SendByte(uint8_t ch){
USART_SendData(USART1,ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
}
//串口中断
void USART1_IRQHandler(){
uint8_t ucTemp;
if (USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
ucTemp = USART_ReceiveData( USART1 );
USART_SendData(USART1,ucTemp);
}
}
//发送字符串
void Usart_SendString(char *str){
unsigned int k = 0;
do{
Usart_SendByte(*(str + k));
k++;
}while(*(str + k) != '\0');
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}