步驟1:軟件和硬件要求
在硬件方面,您需要:
STM32F4發(fā)現(xiàn)板(或其他任何STM32板)
USB轉(zhuǎn)TTL轉(zhuǎn)換器
在軟件方面:
STM32CubeMX
Keil uVision5
已安裝串行庫的Python
步驟2:STM32CubeMX配置
首先讓我們了解我們想要做什么。我們希望通過USART從Python將數(shù)據(jù)傳輸?shù)桨迳希z查是否有正確的數(shù)據(jù)并切換LED。因此,我們需要啟用USART和Led。
從“連接性”選項卡中啟用USART2。
將模式更改為異步
波特率更改為9600 Bits/s
無奇偶校驗的字長為8位
無奇偶校驗位
從DMA設(shè)置中以特殊模式添加USART2_RX
從NVIC設(shè)置中啟用USART2全局中斷
然后生成代碼:)
通過單擊PD12啟用LED
步驟3:Keil軟件開發(fā)
#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,當(dāng)我們得到一個字節(jié)的字符時,它被激活。所以。我們得到該字節(jié)并將其寫入包含完整接收數(shù)據(jù)的data_full,直到得到‘\ n’。當(dāng)我們得到‘\ n’時,我們使完成標(biāo)志1并在while循環(huán)中:
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 */
}
如果完成標(biāo)志為HIGH,我們將比較完整接收的數(shù)據(jù)和我們想要的數(shù)據(jù)的內(nèi)容,如果它們是等于我們切換領(lǐng)導(dǎo)。之后,我們清除完成標(biāo)志,等待新數(shù)據(jù),并清除data_full數(shù)組,以免覆蓋該數(shù)組。
步驟4:Python軟件開發(fā)
因此,這里我們要在結(jié)尾處發(fā)送帶有‘/n’的數(shù)字,因為Keil軟件需要查看它才能知道結(jié)尾。
import serial
ser = serial.Serial(‘COM17’) #check that port on your device from Device Manager
ser.write(b‘24 ’)
您應(yīng)該看到每次您發(fā)送“ 24 \ n”時,LED都會切換。如果您發(fā)送其他任何內(nèi)容,它都不會影響它。
-
mcu
+關(guān)注
關(guān)注
146文章
17185瀏覽量
351744 -
USART
+關(guān)注
關(guān)注
1文章
195瀏覽量
30901 -
python
+關(guān)注
關(guān)注
56文章
4800瀏覽量
84823 -
STM32F4
+關(guān)注
關(guān)注
3文章
194瀏覽量
28096
發(fā)布評論請先 登錄
相關(guān)推薦
評論