/* USER CODE END 4 */
************************************************************
确定硬件没问题
因为主回圈加入printf(" ");
程序就可正常运行
怀疑是不是HAL库没写到UART映射到PA2,PA3相关的指令
造成收不到资料而不进中断
但加入printf(" ");就正常
如下
***********************************************************
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
// FLashProtectCheck();
HAL_SYSTICK_Config(SystemCoreClock/1000);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf(" "); //加入此行就正常
do something.........
}
/* USER CODE END 3 */
}
******************************************************************
非常奇怪的问题
请教一下有没有高人知道这是甚么问题?
相关配置如下 (由CubeMX产生)
*******************************************************
static void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 100000;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_2;
huart1.Init.Parity = UART_PARITY_EVEN;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT;
huart1.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); //使用接收中断及闲置中断,自行加入
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //使用接收中断及闲置中断,自行加入
/* USER CODE END USART1_Init 2 */
}
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pins : PA0 PA1 PA5 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
/* USER CODE BEGIN 4 */
/* USER CODE END 4 */
************************************************************
确定硬件没问题
因为主回圈加入printf(" ");
程序就可正常运行
怀疑是不是HAL库没写到UART映射到PA2,PA3相关的指令
造成收不到资料而不进中断
但加入printf(" ");就正常
如下
***********************************************************
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
// FLashProtectCheck();
HAL_SYSTICK_Config(SystemCoreClock/1000);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf(" "); //加入此行就正常
do something.........
}
/* USER CODE END 3 */
}
******************************************************************
非常奇怪的问题
请教一下有没有高人知道这是甚么问题?
在串口初始函数有加入开启中断如下
static void MX_USART1_UART_Init(void)
{
.....
....
/* USER CODE BEGIN USART1_Init 2 */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
/* USER CODE END USART1_Init 2 */
....
.....
}
且怀疑只进中断一次
也在接收中断函数里
再加入开启接收中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
结果还是一样
串口的RX和TX是连接到电脑的串口上了吗?怎么连接的?
-------------------------------------------
串口是经过CP2102转USB线连接电脑
******************分隔线************************
如何确定的接收中断不能接收数据?
-----------------------------
在接收中断函数内
有加打印指令
printf("enter ISR");
但没打印出
而主回圈while(1)内加printf(" "):
就会打印出"enter ISR"
且接收数据都正常
主程式也可正常运行
2102与MCU连接是没问题的
测试时
电脑端是一直发送资料
USB及UART串口接线都没变
只要主回圈加入printf(" ");及可正常传输资料
这就很闷*_*p
甚至
整个CubeMX项目也重新设定产生
也是一样
STM32F0 HAL库里
若Pin脚使用映射
在
static void MX_USART1_UART_Init(void)
是否有针对映射脚做设定?
在LL库上
是有相关的设定
可不知FO HAL库是否也有?
https://www.stmcu.org.cn/module/forum/thread-616613-1-1.html
这是使用SBUS协议设定
不是很明白楼主这样写用意是什么
为什么不直接用库函数实现接收数据: