电子说
步骤1:软件和硬件要求
在硬件方面,您需要:
STM32F4发现板(或其他任何STM32板)
USB转TTL转换器
在软件方面:
STM32CubeMX
Keil uVision5
已安装串行库的Python
步骤2:STM32CubeMX配置
首先让我们了解我们想要做什么。我们希望通过USART从Python将数据传输到板上,并检查是否有正确的数据并切换LED。因此,我们需要启用USART和Led。
从“连接性”选项卡中启用USART2。
将模式更改为异步
波特率更改为9600 Bits/s
无奇偶校验的字长为8位
无奇偶校验位
从DMA设置中以特殊模式添加USART2_RX
从NVIC设置中启用USART2全局中断
然后生成代码:)
通过单击PD12启用LED
步骤3:Keil软件开发
#include
#include
在字符串操作和定义布尔变量时将需要这些库。
/* USER CODE BEGIN 2 */
HAL_UART_Receive_DMA(&huart2, (uint8_t *) data_buffer, 1);
/* USER CODE END 2 */
此处,UART
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback could be implemented in the user file
*/
if(data_buffer[0] != ‘ ’){
data_full[index_] = data_buffer[0];
index_++;
}else{
index_ = 0;
finished = 1;
}
//HAL_UART_Transmit(&huart2, data_buffer, 1, 10);
}
/* USER CODE END 4 */
这是ISR,当我们得到一个字节的字符时,它被激活。所以。我们得到该字节并将其写入包含完整接收数据的data_full,直到得到‘\ n’。当我们得到‘\ n’时,我们使完成标志1并在while循环中:
while (1)
{
/* USER CODE END WHILE */
if(finished){
if(strcmp(data_full, cmp_) == 0){
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
}
memset(data_full,‘’,strlen(data_full));
finished = 0;
}else{
__NOP ();
}
/* USER CODE BEGIN 3 */
}
如果完成标志为HIGH,我们将比较完整接收的数据和我们想要的数据的内容,如果它们是等于我们切换领导。之后,我们清除完成标志,等待新数据,并清除data_full数组,以免覆盖该数组。
步骤4:Python软件开发
因此,这里我们要在结尾处发送带有‘/n’的数字,因为Keil软件需要查看它才能知道结尾。
import serial
ser = serial.Serial(‘COM17’) #check that port on your device from Device Manager
ser.write(b‘24 ’)
您应该看到每次您发送“ 24 \ n”时,LED都会切换。如果您发送其他任何内容,它都不会影响它。
全部0条评论
快来发表一下你的评论吧 !