【STM32F746 Nucleo】 MxCube开发串口通讯
[复制链接]
因为该开发板是官方设计推出的,顾在工具软中有开发板的资源,可以直接选择当前使用的开发板。
-
- 时钟配置
可以根据自己的实际情况进行选择始终频率。最大始终频率是216MHz
-
- 时钟源配置
此环境下已经进行了配置,检查一下即可。
-
- SYS设置Debug
选择的是 SW模式
-
- 串口配置
涉及波特率设置,引脚设置和中断设置
1.6代码生成
在此埋个伏笔,下一篇内容简单描述一下。
二、keil工程
2.1.CubeMX生成的(MDK)keil工程
2.2、原理图引脚
2.3、串口实现
CubeMX软件,通过图像化的方式,生成HAL库程序代码,HAL库程序代码较标准库具有很大的区别。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
比如此行代码,是串口放回数据的函数,底层到都是采用中断的方式处理,但边准库采用的是直接中断调用的方式,HAL库采用的是回调函数的方式。HAL的设计理念其实更好用。
1.添加接收和发送函数代码
/* USER CODE BEGIN 1 */
/**
* [url=home.php?mod=space&uid=159083]@brief[/url] Usart1Send
* @param pUSARTx: Specified serial port
* @param str:Send data content
* @param strlen:Send data len
* @retval None
*/
void Usart2_Send( char *str,uint8_t strlen)
{
unsigned int k=0;
do
{
HAL_UART_Transmit(&huart2,(uint8_t *)(str + k),1,1000);
k++;
} while(k < strlen);
}
/**
* @brief Usart1Send
* @param pUSARTx: Specified serial port
* @param str:Send data content
* @param strlen:Send data len
* @retval None
*/
void Usart3_Send( char *str,uint8_t strlen)
{
unsigned int k=0;
do
{
HAL_UART_Transmit(&huart3,(uint8_t *)(str + k),1,1000);
k++;
} while(k < strlen);
}
/**
* @brief HAL_UART_RxCpltCallback
* @param huart: Specified serial port
* @retval None
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART2)
{
if(Uart2_Rx_Cnt > 254)
{
Uart2_Rx_Cnt = 0;
memset(RxBuffer_2,0x00,sizeof(RxBuffer_2));
}
else
{
RxBuffer_2[Uart2_Rx_Cnt++] = aRxBuffer_2;
}
HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer_2, 1);
}else if(huart->Instance == USART3)
{
if(Uart3_Rx_Cnt > 254)
{
Uart3_Rx_Cnt = 0;
memset(RxBuffer_3,0x00,sizeof(RxBuffer_3));
}
else
{
RxBuffer_3[Uart3_Rx_Cnt++] = aRxBuffer_3;
}
HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer_3, 1);
}
UNUSED(huart);
}
- 添加H文件声明代码
extern void Usart2_Send( char *str,uint8_t strlen);
extern void Usart2_Send( char *str,uint8_t strlen);
- 添加定义数字代码
uint8_t aRxBuffer_2 = 0;
uint8_t aRxBuffer_3 = 0;
unsigned char aRxBuffer_hlp = 0;
unsigned char Uart2_Rx_Cnt = 0;
unsigned char Uart3_Rx_Cnt = 0;
unsigned char RxBuffer_2[RXBUFFERSIZE];
unsigned char RxBuffer_3[RXBUFFERSIZE];
unsigned char hlpUart1_Rx_Cnt =0;
unsigned char RxBuffer_hlp[RXBUFFERSIZE];
2.4、串口通讯测试
|