今天學習了串口通信,在正點原子庫函數模板中寫了自收發的程序,
void my_usart1_init(void)
{
GPIO_InitTypeDef gpio; //創建GPIO的初始化結構體
USART_InitTypeDef usart;//創建USART的初始化結構體
NVIC_InitTypeDef nvic;//創建NVIC的初始化結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1的時鐘
gpio.GPIO_Mode=GPIO_Mode_AF_PP;//設置復用推挽輸出
gpio.GPIO_Speed=GPIO_Speed_10MHz;//設置輸出頻率
gpio.GPIO_Pin=GPIO_Pin_9;//設置GPIO口為9
GPIO_Init(GPIOA,&gpio);//配置到GPIOA上
gpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;//設置浮空輸入
gpio.GPIO_Speed=GPIO_Speed_10MHz;//設置輸入頻率
gpio.GPIO_Pin=GPIO_Pin_10;//設置輸入引腳為9
GPIO_Init(GPIOA,&gpio);//配置到GPIOA上
usart.USART_BaudRate=115200;//設置波特率
usart.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制,暫且不需要
usart.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;//選擇發送和接收模式
usart.USART_Parity= USART_Parity_No;//設置奇偶校驗位 Even 和 Odd
usart.USART_StopBits=USART_StopBits_1;//停止位為1
usart.USART_WordLength=USART_WordLength_8b;//設置數據位為8
USART_Init(USART1,&usart);//將配置的結構體地址傳給USART1
USART_Cmd(USART1,ENABLE);//使能串口1
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//使能中斷
nvic.NVIC_IRQChannel=USART1_IRQn;//選擇中斷的通道為USART1
nvic.NVIC_IRQChannelCmd=ENABLE;//通道使能
nvic.NVIC_IRQChannelPreemptionPriority=1;//搶占優先級
nvic.NVIC_IRQChannelSubPriority=1;//子優先級
NVIC_Init(&nvic);//將配置的結構體地址傳給NVIC來配置
}
void USART1_IRQHandler(void)//中斷函數內容
{
u8 res;//存放接收數據的變量
if(USART_GetITStatus(USART1,USART_IT_RXNE) == 1)
{
res=USART_ReceiveData(USART1);//接收數據函數,讀取USART1的DR寄存器數據,返回數據值給res
USART_SendData(USART1,res);//發送數據函數,通過USART1通道發送res數據出去
}
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷分組
my_usart1_init();//調用USART1
while(1);
}
上一篇:STM32 GPIO 寄存器的配置
下一篇:基于STM32C8T6的超聲波和Oled開發(寄存器版)
推薦閱讀最新更新時間:2025-04-23 18:00



