親測有效,同PC間通信。
【*】 程序簡介
-工程名稱:工程模版
-實驗平臺: STM32F427 同步控制器
-MDK版本:
-ST固件庫版本:
【*】 時鐘
A.晶振:
-外部高速晶振:25MHz
-RTC晶振:32.768KHz
B.各總線運行時鐘:
-系統時鐘 = SYCCLK = AHB1 = 180MHz
-APB2 = 90MHz
-APB1 = 45MHz
C.浮點運算單元:
使能
單片機源程序如下:
- #include "stm32f4xx.h"
- #include "stm32f4xx_usart.h"
- uint8_t rx_flag=0;
- uint8_t rx_buff[100]={0x00,0x00};
- uint8_t i=0,j=0;
- uint8_t n=5;
- void USART_INIT(void);
- void nvic_configuration(void);
- int main(void)
- {
- USART_INIT();
- GPIO_SetBits(GPIOA, GPIO_Pin_6);
- USART_SendData(USART2, 66);
- while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
- USART_SendData(USART2, 67);
- while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
- GPIO_ResetBits(GPIOA, GPIO_Pin_6);
- while(1)
- {
- if(rx_flag==1)
- {
- rx_buff[i++]=USART_ReceiveData(USART2);
- rx_flag=0;
- }
- if(i==n)
- {
- GPIO_SetBits(GPIOA, GPIO_Pin_6);
- i=0;
- for(j=0;j<n;j++)
- {
- USART_SendData(USART2, rx_buff[j]);
- while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);
- }
- GPIO_ResetBits(GPIOA, GPIO_Pin_6);
- }
-
- }
- }
- void USART_INIT(void)
- {
- // GPIO initiallize
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA ,ENABLE); //使能外設時鐘AHB1
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // A6 control singal
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //實際上就是推挽輸出
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOA, GPIO_Pin_6);
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2復用為USART2
- GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3復用為USART2
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3 ; //Tx and Rx
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //alternate function
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //low rate
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- ////USART initiallize
- USART_InitTypeDef usart_2_initstructure;
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART2時鐘 掛載在APB1外設時鐘上
-
- usart_2_initstructure.USART_BaudRate=9600;
- usart_2_initstructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
- usart_2_initstructure.USART_Mode=USART_Mode_Rx |USART_Mode_Tx;
- usart_2_initstructure.USART_Parity=USART_Parity_No;
- usart_2_initstructure.USART_StopBits=USART_StopBits_1;
- usart_2_initstructure.USART_WordLength=USART_WordLength_8b;
- USART_Init(USART2, &usart_2_initstructure);
- USART_Cmd(USART2, ENABLE); //使能串口2
-
- //some flags and IT
- USART_ClearFlag(USART2, USART_FLAG_TC); //clear transmit flag
-
- nvic_configuration();
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//開啟相關中斷
- }
- //內嵌中斷向量控制器config
- void nvic_configuration()
- {
- //NVIC config and initiallize
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- NVIC_InitTypeDef NVIC_InitStructure;
-
- NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE ;
- NVIC_Init(&NVIC_InitStructure);
- }
- void USART2_IRQHandler()
- {
- if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
- {
- // rx_buff[i++]=USART_ReceiveData(USART2);
- rx_flag=1;
- USART_ClearFlag(USART2, USART_FLAG_RXNE);
- }
- }
復制代碼
所有資料51hei提供下載:
F427_USART2_485.rar
(612.81 KB, 下載次數: 38)
2018-12-1 17:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|