cpa網(wǎng)站怎么做百度知道電腦版網(wǎng)頁(yè)入口
?單片機(jī)型號(hào)STM32F103R6:
最后實(shí)現(xiàn)的效果是,開機(jī)后PC內(nèi)要求輸入1或0,輸入1則打開燈泡,輸入0則關(guān)閉燈泡,輸入其他內(nèi)容則顯示錯(cuò)誤,值得注意的是這個(gè)模擬的東西只能輸入英文
之所以用2個(gè)LED燈是因?yàn)長(zhǎng)ED電阻粗略一算就是100歐姆,所以懶得再去畫其他的東西,真是天助我也
時(shí)鐘頻率HSI 8MHZ;
之所以用8MHZ 這么慢的內(nèi)部時(shí)鐘,是因?yàn)闀r(shí)鐘太快了,模擬速度其實(shí)也上不去,proteus模擬一秒鐘要花幾十秒,我還不如選個(gè)慢的反倒快了一點(diǎn)。真的是欲速則不達(dá)
?選擇PB1作為輸出引腳具體設(shè)置看圖片。選擇了推挽輸出,初始化輸出高電平,接了上拉電阻。
這個(gè)是串口設(shè)置
?值得一提的是好像proteus里面那個(gè)終端的波特率最高只能值5.7萬(wàn)那個(gè)樣子
所以我把波特率設(shè)置為了56000.proteus里面的虛擬PC同樣也要這樣設(shè)置,而且單片機(jī)頻率最好也設(shè)置為8MHZ.
?
//這個(gè)是main函數(shù)
int main(void)
{
// uint8_t txtbuff[]="please input num1 or 2 \n\r 1 turn on the light\n\r 2 turn off the light";uint8_t txtbuff[]="please input num 1 or 2\n\r";uint8_t txtbuff1[]="1 turn on the light\n\r";uint8_t txtbuff2[]="2 turn off the light\n\r";/* 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 *//* USER CODE END 2 */HAL_UART_Transmit(&huart1,txtbuff,sizeof(txtbuff),1000); HAL_UART_Transmit(&huart1,txtbuff1,sizeof(txtbuff1),1000);HAL_UART_Transmit(&huart1,txtbuff2,sizeof(txtbuff2),1000);HAL_UART_Receive_IT(&huart1,(uint8_t*)&aRxBuffer,1);/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
//這個(gè)是修改后的函數(shù) 需要找到這個(gè)函數(shù)然后改成這個(gè)樣子就可以了,建議使用搜索整個(gè)project
void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */uint8_t a[]="light on\n\r";uint8_t b[]="light off\n\r";uint8_t c[]="error badness\n\r";extern uint8_t aRxBuffer;/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 */if(aRxBuffer=='0'){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);HAL_UART_Transmit(&huart1,b,sizeof(b),1000); }else if(aRxBuffer=='1'){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);HAL_UART_Transmit(&huart1,a,sizeof(a),1000); }else{HAL_UART_Transmit(&huart1,c,sizeof(c),1000); }/* USER CODE END USART1_IRQn 1 */HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
}
其他的地方都沒(méi)有修改全都保持默認(rèn)就可以了
?