當(dāng)前位置:
首頁(yè) >
STM32 UART2程序--端口重映射
發(fā)布時(shí)間:2025/3/15
55
豆豆
生活随笔
收集整理的這篇文章主要介紹了
STM32 UART2程序--端口重映射
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
STM32 UART2程序?2012-12-04 16:26:05
程序在正點(diǎn)原子開發(fā)板SRAM中調(diào)試通過,開發(fā)環(huán)境IAR5.30.
void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O?ú3?ê??ˉ?á11ì? NVIC_InitTypeDef NVIC_InitStructure;//?D??3?ê??ˉ?á11ì? USART_InitTypeDef USART_InitStructure;//′??ú3?ê??ˉ?á11ì? ? /* Enable the USART2 Pins Software Remapping */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,?ENABLE); ? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);? ???? /* Configure USART2 Rx (PA.03) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART2 Tx (PA.02) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Enable the USART2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ? ? USART_InitStructure.USART_BaudRate = bound; ? ? ? ? ? ? ? ?//ò?°?éè???a9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×?3¤?a8??êy?Y??ê? USART_InitStructure.USART_StopBits = USART_StopBits_1; ? ? //ò???í£?1?? USART_InitStructure.USART_Parity = USART_Parity_No; ? ? ? ?//?T????D£?é?? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//Yá÷???? USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ê?·¢?£ê? ?? USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); /* Enable USART2 */ USART_Cmd(USART2, ENABLE); }
void USART2_IRQHandler(void) ? { ? if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET) ? { ? ? ?? USART_SendData(USART2, USART_ReceiveData(USART2)); ? ? ? ? ? ?? } } 該程序功能是返回你發(fā)送到串口的數(shù)據(jù)。
如果你的USART2接到PD端口上面了,要修改程序如下,這里就需要端口映射了,映射寄存器是AFIO控制的,它接在APB2時(shí)鐘區(qū)域,所以下面的紅色代碼必須要有,藍(lán)色代碼對(duì)端口進(jìn)行初始化。 void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O?ú3?ê??ˉ?á11ì? NVIC_InitTypeDef NVIC_InitStructure;//?D??3?ê??ˉ?á11ì? USART_InitTypeDef USART_InitStructure;//′??ú3?ê??ˉ?á11ì? ? /* Enable the USART2 Pins Software Remapping */ ? ??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD ,ENABLE); ? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); ??? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); ? ? GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); ??? /* Configure USART2 Rx (PD.06) as input floating */ ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;?? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure USART2 Tx (PD.05) as alternate function push-pull */ ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Enable the USART2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ? ? USART_InitStructure.USART_BaudRate = bound;//ò?°?éè???a9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×?3¤?a8??êy?Y??ê? USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò???í£?1?? USART_InitStructure.USART_Parity = USART_Parity_No;//?T????D£?é?? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//?Yá÷???? USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ê?·¢?£ê? ?? USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); /* Enable USART2 */ USART_Cmd(USART2, ENABLE); }
void USART2_IRQHandler(void) ? { ? if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET) ? { ? ? ?? USART_SendData(USART2, USART_ReceiveData(USART2)); ? ? ? ? ? ?? } }
ST固件庫(kù),有方便的地方,寫程序很容易,但是有時(shí)候理解起來很麻煩,看自己的喜好然后選擇吧。
分類:?LINUX
USART1程序很多,看看USART2程序。注意紅色部分,首先要使能相關(guān)端口的時(shí)鐘。 因?yàn)閁SART2可以映射成不同的端口,所以要端口映射。 結(jié)合你自己的開發(fā)板,設(shè)置正確的映射口.(正點(diǎn)原子的是PA03PA02.) STM32F103ZE默認(rèn)的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。
程序在正點(diǎn)原子開發(fā)板SRAM中調(diào)試通過,開發(fā)環(huán)境IAR5.30.
void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O?ú3?ê??ˉ?á11ì? NVIC_InitTypeDef NVIC_InitStructure;//?D??3?ê??ˉ?á11ì? USART_InitTypeDef USART_InitStructure;//′??ú3?ê??ˉ?á11ì? ? /* Enable the USART2 Pins Software Remapping */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,?ENABLE); ? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);? ???? /* Configure USART2 Rx (PA.03) as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART2 Tx (PA.02) as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Enable the USART2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ? ? USART_InitStructure.USART_BaudRate = bound; ? ? ? ? ? ? ? ?//ò?°?éè???a9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×?3¤?a8??êy?Y??ê? USART_InitStructure.USART_StopBits = USART_StopBits_1; ? ? //ò???í£?1?? USART_InitStructure.USART_Parity = USART_Parity_No; ? ? ? ?//?T????D£?é?? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//Yá÷???? USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ê?·¢?£ê? ?? USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); /* Enable USART2 */ USART_Cmd(USART2, ENABLE); }
void USART2_IRQHandler(void) ? { ? if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET) ? { ? ? ?? USART_SendData(USART2, USART_ReceiveData(USART2)); ? ? ? ? ? ?? } } 該程序功能是返回你發(fā)送到串口的數(shù)據(jù)。
如果你的USART2接到PD端口上面了,要修改程序如下,這里就需要端口映射了,映射寄存器是AFIO控制的,它接在APB2時(shí)鐘區(qū)域,所以下面的紅色代碼必須要有,藍(lán)色代碼對(duì)端口進(jìn)行初始化。 void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O?ú3?ê??ˉ?á11ì? NVIC_InitTypeDef NVIC_InitStructure;//?D??3?ê??ˉ?á11ì? USART_InitTypeDef USART_InitStructure;//′??ú3?ê??ˉ?á11ì? ? /* Enable the USART2 Pins Software Remapping */ ? ??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD ,ENABLE); ? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); ??? ?RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); ? ? GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); ??? /* Configure USART2 Rx (PD.06) as input floating */ ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;?? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Configure USART2 Tx (PD.05) as alternate function push-pull */ ?GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); /* Enable the USART2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ? ? USART_InitStructure.USART_BaudRate = bound;//ò?°?éè???a9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×?3¤?a8??êy?Y??ê? USART_InitStructure.USART_StopBits = USART_StopBits_1;//ò???í£?1?? USART_InitStructure.USART_Parity = USART_Parity_No;//?T????D£?é?? USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//?Yá÷???? USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ê?·¢?£ê? ?? USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //USART_ITConfig(USART2, USART_IT_TXE, ENABLE); /* Enable USART2 */ USART_Cmd(USART2, ENABLE); }
void USART2_IRQHandler(void) ? { ? if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET) ? { ? ? ?? USART_SendData(USART2, USART_ReceiveData(USART2)); ? ? ? ? ? ?? } }
ST固件庫(kù),有方便的地方,寫程序很容易,但是有時(shí)候理解起來很麻煩,看自己的喜好然后選擇吧。
總結(jié)
以上是生活随笔為你收集整理的STM32 UART2程序--端口重映射的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle触发器无效且,oracle创
- 下一篇: 文字 竖排居中_学会了这几招,瞬间就搞定