日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

STM32F429串口设置调试笔记

發(fā)布時(shí)間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F429串口设置调试笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

USART3 外接 RS485
UART7 外接 RS232
//USART支持同步傳輸,UART只支持異步傳輸,其他一樣,備注一下
//本例程都做異步傳輸
1-5步在main.c文件中
1、STM32CubeMX自動(dòng)生成

UART_HandleTypeDef huart7; UART_HandleTypeDef huart3;

2、新增接收緩沖區(qū)

u8 aRxBuffer_uart3[64]={0}; u8 aRxBuffer_uart7[64]={0};

3、STM32CubeMX自動(dòng)生成

static void MX_UART7_Init(void); static void MX_USART3_UART_Init(void);

4、STM32CubeMX自動(dòng)生成

int main(void) {......MX_UART7_Init();MX_USART3_UART_Init();...... }

5、STM32CubeMX自動(dòng)生成

static void MX_UART7_Init(void) {/* USER CODE BEGIN UART7_Init 0 *//* USER CODE END UART7_Init 0 *//* USER CODE BEGIN UART7_Init 1 *//* USER CODE END UART7_Init 1 */huart7.Instance = UART7;huart7.Init.BaudRate = 115200;huart7.Init.WordLength = UART_WORDLENGTH_8B;huart7.Init.StopBits = UART_STOPBITS_1;huart7.Init.Parity = UART_PARITY_NONE;huart7.Init.Mode = UART_MODE_TX_RX;huart7.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart7.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart7) != HAL_OK){Error_Handler();}/* USER CODE BEGIN UART7_Init 2 */HAL_UART_Receive_IT(&huart7, (u8 *)aRxBuffer_uart7, 1);**//開(kāi)啟接收中斷,如果沒(méi)有自動(dòng)生成就要自己加入**/* USER CODE END UART7_Init 2 */} static void MX_USART3_UART_Init(void) {/* USER CODE BEGIN USART3_Init 0 *//* USER CODE END USART3_Init 0 *//* USER CODE BEGIN USART3_Init 1 *//* USER CODE END USART3_Init 1 */huart3.Instance = USART3;huart3.Init.BaudRate = 115200;huart3.Init.WordLength = UART_WORDLENGTH_8B;huart3.Init.StopBits = UART_STOPBITS_1;huart3.Init.Parity = UART_PARITY_NONE;huart3.Init.Mode = UART_MODE_TX_RX;huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart3.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart3) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART3_Init 2 */HAL_UART_Receive_IT(&huart3, (u8 *)aRxBuffer_uart3, 1);// 即Size設(shè)置為1,只接收1Byte數(shù)據(jù),在每次中斷結(jié)束后重新配置來(lái)使能中斷。/* USER CODE END USART3_Init 2 */}

6、STM32CubeMX自動(dòng)生成,如果沒(méi)有自己加入
stm32f4xx.hal.msp.c文件中

void HAL_UART_MspInit(UART_HandleTypeDef* huart) {GPIO_InitTypeDef GPIO_InitStruct = {0};if(huart->Instance==UART7){....../* USER CODE BEGIN UART7_MspInit 1 */HAL_NVIC_SetPriority(UART7_IRQn, 3, 3);//設(shè)置中斷HAL_NVIC_EnableIRQ(UART7_IRQn);;//設(shè)置中斷/* USER CODE END UART7_MspInit 1 */}else if(huart->Instance==USART3){....../* USART3 interrupt Init */HAL_NVIC_EnableIRQ(USART3_IRQn);//設(shè)置中斷HAL_NVIC_SetPriority(USART3_IRQn, 3, 3);//設(shè)置中斷} }

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)函數(shù)中如果沒(méi)有自動(dòng)生成,加入:
HAL_NVIC_DisableIRQ(UART7_IRQn);
HAL_NVIC_DisableIRQ(USART3_IRQn);
這個(gè)不是必須的,不寫(xiě)也不影響.

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) {if(huart->Instance==UART7){/* USER CODE BEGIN UART7_MspDeInit 0 *//* USER CODE END UART7_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_UART7_CLK_DISABLE();/**UART7 GPIO ConfigurationPF6 ------> UART7_RXPF7 ------> UART7_TX*/HAL_GPIO_DeInit(GPIOF, GPIO_PIN_6|GPIO_PIN_7);/* USER CODE BEGIN UART7_MspDeInit 1 */HAL_NVIC_DisableIRQ(UART7_IRQn); //初始化關(guān)中斷/* USER CODE END UART7_MspDeInit 1 */}else if(huart->Instance==USART3){/* USER CODE BEGIN USART3_MspDeInit 0 *//* USER CODE END USART3_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_USART3_CLK_DISABLE();/**USART3 GPIO ConfigurationPC10 ------> USART3_TXPC11 ------> USART3_RX*/HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);/* USART3 interrupt DeInit */HAL_NVIC_DisableIRQ(USART3_IRQn); //初始化關(guān)中斷/* USER CODE BEGIN USART3_MspDeInit 1 *//* USER CODE END USART3_MspDeInit 1 */}}

7、STM32CubeMX自動(dòng)生成,如果沒(méi)有自己加入
stm32f4xx.it.c文件中

extern UART_HandleTypeDef huart3; extern UART_HandleTypeDef huart7; void USART3_IRQHandler(void) {/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart3);/* USER CODE BEGIN USART3_IRQn 1 *//* USER CODE END USART3_IRQn 1 */ }/* USER CODE BEGIN 1 */ void UART7_IRQHandler(void) {/* USER CODE BEGIN USART3_IRQn 0 *//* USER CODE END USART3_IRQn 0 */HAL_UART_IRQHandler(&huart7);/* USER CODE BEGIN USART3_IRQn 1 *//* USER CODE END USART3_IRQn 1 */ }

8、重寫(xiě)接收中斷回調(diào)函數(shù),測(cè)試
main.c中

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {static int a=0;a++; // printf("%d",a);if(huart->Instance==USART3){printf("USART3 %d..%d\n",a,aRxBuffer_uart3[0]);HAL_UART_Receive_IT(&huart3, (uint8_t *)aRxBuffer_uart3, 1);//重開(kāi)中斷}if(huart->Instance==UART7){printf("UART7 %d..%d\n",a,aRxBuffer_uart7[0]);HAL_UART_Receive_IT(&huart7, (uint8_t *)aRxBuffer_uart7, 1);//重開(kāi)中斷} }

9、發(fā)送測(cè)試,這段代碼可以放在main.c文件main()函數(shù)while(1){}中,或其他定時(shí)或外部中斷函數(shù)中測(cè)試

static int TEAT_num=0; TEAT_num++; // printf("ttest = %x\n", TEAT_num);//測(cè)試OK RS485_OUT=1;//485輸出 delay_us(20);//10us會(huì)有錯(cuò)誤,485外部硬件電路不同,延時(shí)時(shí)間可能不同 HAL_UART_Transmit(&huart3, (uint8_t *)&TEAT_num, 1, 0xFFFF);//huart3 485 while(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_TC)!=SET);//等待發(fā)送完成 RS485_OUT=0;//485輸入 HAL_UART_Transmit(&huart7, (uint8_t *)&TEAT_num, 4, 0xFFFF);//huart7 串口 while(__HAL_UART_GET_FLAG(&huart7,UART_FLAG_TC)!=SET);//等待發(fā)送完成

10、如果用printf 打印輸出數(shù)據(jù)
則重定義int fputc(int ch, FILE *f);函數(shù)

//int fputc(int ch, FILE *f) //{ // ITM_SendChar(ch); // return ch; //}//int fputc(int ch, FILE *f) //{ // RS485_OUT=1;//485輸出 // delay_us(20); // HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, 0xFFFF); // while(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_TC)!=SET);//等待發(fā)送完成 // RS485_OUT=0;//485輸入 // return ch; //} int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart7, (uint8_t *)&ch, 1, 0xFFFF);while(__HAL_UART_GET_FLAG(&huart7,UART_FLAG_TC)!=SET);//等待發(fā)送完成return ch; }

總結(jié)

以上是生活随笔為你收集整理的STM32F429串口设置调试笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。