STM32F429串口设置调试笔记
生活随笔
收集整理的這篇文章主要介紹了
STM32F429串口设置调试笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
USART3 外接 RS485
UART7 外接 RS232
//USART支持同步傳輸,UART只支持異步傳輸,其他一樣,備注一下
//本例程都做異步傳輸
1-5步在main.c文件中
1、STM32CubeMX自動生成
2、新增接收緩沖區
u8 aRxBuffer_uart3[64]={0}; u8 aRxBuffer_uart7[64]={0};3、STM32CubeMX自動生成
static void MX_UART7_Init(void); static void MX_USART3_UART_Init(void);4、STM32CubeMX自動生成
int main(void) {......MX_UART7_Init();MX_USART3_UART_Init();...... }5、STM32CubeMX自動生成
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);**//開啟接收中斷,如果沒有自動生成就要自己加入**/* 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設置為1,只接收1Byte數據,在每次中斷結束后重新配置來使能中斷。/* USER CODE END USART3_Init 2 */}6、STM32CubeMX自動生成,如果沒有自己加入
stm32f4xx.hal.msp.c文件中
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)函數中如果沒有自動生成,加入:
HAL_NVIC_DisableIRQ(UART7_IRQn);
HAL_NVIC_DisableIRQ(USART3_IRQn);
這個不是必須的,不寫也不影響.
7、STM32CubeMX自動生成,如果沒有自己加入
stm32f4xx.it.c文件中
8、重寫接收中斷回調函數,測試
main.c中
9、發送測試,這段代碼可以放在main.c文件main()函數while(1){}中,或其他定時或外部中斷函數中測試
static int TEAT_num=0; TEAT_num++; // printf("ttest = %x\n", TEAT_num);//測試OK RS485_OUT=1;//485輸出 delay_us(20);//10us會有錯誤,485外部硬件電路不同,延時時間可能不同 HAL_UART_Transmit(&huart3, (uint8_t *)&TEAT_num, 1, 0xFFFF);//huart3 485 while(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_TC)!=SET);//等待發送完成 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);//等待發送完成10、如果用printf 打印輸出數據
則重定義int fputc(int ch, FILE *f);函數
總結
以上是生活随笔為你收集整理的STM32F429串口设置调试笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教你用Axure RP 9 设计手机AP
- 下一篇: Android仿豆瓣书影音频道推荐表单堆