找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3273|回复: 0
打印 上一主题 下一主题
收起左侧

一个接收指令的简单的stm32小程序 HAL库

[复制链接]
跳转到指定楼层
楼主
ID:334372 发表于 2018-8-18 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个接收指令的简单的stm32小程序用的普中的板子 f103zeHAL库的 软件用的cubemx

单片机源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f1xx_hal.h"
  4. #include "tim.h"
  5. #include "usart.h"
  6. #include "gpio.h"

  7. /* USER CODE BEGIN Includes */
  8. #include "stdio.h"
  9. /* USER CODE END Includes */

  10. /* Private variables ---------------------------------------------------------*/

  11. /* USER CODE BEGIN PV */
  12. /* Private variables ---------------------------------------------------------*/
  13. int ch;
  14. /* USER CODE END PV */

  15. /* Private function prototypes -----------------------------------------------*/
  16. void SystemClock_Config(void);

  17. /* USER CODE BEGIN PFP */
  18. /* Private function prototypes -----------------------------------------------*/

  19. /* USER CODE END PFP */

  20. /* USER CODE BEGIN 0 */
  21. static void Show_Message(void)
  22. {
  23.   printf("\r\n   这是一个通过串口通信指令控制LED灯或蜂鸣器实验 \n");
  24.   printf("指令对应如下:\n");
  25.   printf("   指令   ------      状态 \n");
  26.   printf("     1    ------    LED1翻转 \n");
  27.   printf("     2    ------    LED2翻转 \n");
  28.   printf("     3    ------    LED3翻转 \n");
  29.   printf("     4    ------    蜂鸣器响 \n");
  30.   printf("     5    ------    蜂鸣器不响 \n");
  31. }
  32. /* USER CODE END 0 */

  33. /**
  34.   * @brief  The application entry point.
  35.   *
  36.   * @retval None
  37.   */
  38. int main(void)
  39. {
  40.   /* USER CODE BEGIN 1 */

  41.        
  42.   /* USER CODE END 1 */

  43.   /* MCU Configuration----------------------------------------------------------*/

  44.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  45.   HAL_Init();

  46.   /* USER CODE BEGIN Init */

  47.   /* USER CODE END Init */

  48.   /* Configure the system clock */
  49.   SystemClock_Config();

  50.   /* USER CODE BEGIN SysInit */

  51.   /* USER CODE END SysInit */

  52.   /* Initialize all configured peripherals */
  53.   MX_GPIO_Init();
  54.   MX_USART1_UART_Init();
  55.   MX_TIM3_Init();
  56.   /* USER CODE BEGIN 2 */

  57.   Show_Message();
  58.   /* USER CODE END 2 */

  59.   /* Infinite loop */
  60.   /* USER CODE BEGIN WHILE */
  61.   while (1)
  62.   {

  63.   /* USER CODE END WHILE */

  64.   /* USER CODE BEGIN 3 */
  65.   ch=getchar();
  66.   printf("接收到字符:%c\n",ch);
  67.                
  68.           /* 根据字符指令控制RGB彩灯颜色 */
  69.     switch(ch)
  70.     {
  71.                        
  72.       case '1':
  73.                HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0); //LED1翻转
  74.                break;
  75.       case '2':
  76.                HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1); //LED2翻转
  77.                break;
  78.       case '3':
  79.                HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2); //LED3翻转
  80.                break;
  81.       case '4':                                //蜂鸣器响
  82.                           
  83.                                        HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  84.                                 __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,50);
  85.                     break;
  86.       case '5':
  87.                HAL_TIM_PWM_Stop(&htim3,TIM_CHANNEL_2);  //蜂鸣器不响
  88.                break;
  89.       default:
  90.         /* 如果不是指定指令字符,打印提示信息 */
  91.         Show_Message();
  92.       break;
  93.     }       
  94.   }
  95.   /* USER CODE END 3 */

  96. }

  97. /**
  98.   * @brief System Clock Configuration
  99.   * @retval None
  100.   */
  101. void SystemClock_Config(void)
  102. {

  103.   RCC_OscInitTypeDef RCC_OscInitStruct;
  104.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  105.     /**Initializes the CPU, AHB and APB busses clocks
  106.     */
  107.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  108.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  109.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  110.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  111.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  112.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  113.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  114.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  115.   {
  116.     _Error_Handler(__FILE__, __LINE__);
  117.   }

  118.     /**Initializes the CPU, AHB and APB busses clocks
  119.     */
  120.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  121.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  122.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  123.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  124.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  125.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  126.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  127.   {
  128.     _Error_Handler(__FILE__, __LINE__);
  129.   }

  130.     /**Configure the Systick interrupt time
  131.     */
  132.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  133.     /**Configure the Systick
  134.     */
  135.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  136.   /* SysTick_IRQn interrupt configuration */
  137.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  138. }

  139. /* USER CODE BEGIN 4 */
  140. int fputc(int ch, FILE *f)
  141. {
  142.   HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  143.   return ch;
  144. }

  145. int fgetc(FILE * f)
  146. {
  147.   uint8_t ch = 0;
  148.   HAL_UART_Receive(&huart1,&ch, 1, 0xffff);
  149.   return ch;
  150. }
  151. /* USER CODE END 4 */

  152. /**
  153.   * @brief  This function is executed in case of error occurrence.
  154.   * @param  file: The file name as string.
  155.   * @param  line: The line in file as a number.
  156.   * @retval None
  157.   */
  158. void _Error_Handler(char *file, int line)
  159. {
  160.   /* USER CODE BEGIN Error_Handler_Debug */
  161.   /* User can add his own implementation to report the HAL error return state */
  162.   while(1)
  163.   {
  164.   }
  165.   /* USER CODE END Error_Handler_Debug */
  166. }

  167. #ifdef  USE_FULL_ASSERT
  168. ……………………

  169. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
control.rar (9.02 MB, 下载次数: 13)






分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表