你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STWINKT1B评测】-02-串口-定时器LED灯测试

[复制链接]
shenxiaolin_mai 发布时间:2024-7-30 14:32
前些时间收到的开发板,今天来和大家分享一下,首先从硬件的角度来说。
01-LED.png

硬件方面,LED和串口的连接方式可以通过上面的图形了解清楚。
LED1:PE1
LED2:PD0

USART2-TXD:PD5
USART2-RXD:PD6

两个引脚还应该注意复用关系,我们可以通过下面的表格得知:

02-USART串口.png

有了上面的硬件基础了之后,我们就可以进行编程了,我们首先看LED的编程


  1. void LED_Init(void)
  2. {
  3.                 static GPIO_InitTypeDef  GPIO_InitStruct;
  4.                 __HAL_RCC_GPIOD_CLK_ENABLE();
  5.                 __HAL_RCC_GPIOE_CLK_ENABLE();
  6.                 /* -2- Configure IO in output push-pull mode to drive external LEDs */
  7.                 GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  8.                 GPIO_InitStruct.Pull  = GPIO_PULLUP;
  9.                 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

  10.                 GPIO_InitStruct.Pin =GPIO_PIN_0 ;
  11.           //--LED2
  12.                 HAL_GPIO_Init(GPIOD , &GPIO_InitStruct);
  13.           //--LED 1
  14.                 GPIO_InitStruct.Pin =GPIO_PIN_1 ;
  15.                 HAL_GPIO_Init(GPIOE , &GPIO_InitStruct);
  16.        

  17. }


  18. void LED_Test(void)
  19. {
  20.    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_0);
  21.          HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_1);
  22.    HAL_Delay(500);
  23. }
复制代码
LED的代码相对较简单,然后就是串口:


  1. #include "DRV_UART.h"

  2. UART_HandleTypeDef huart;

  3. void UART_IO_Init(void)
  4. {
  5.          GPIO_InitTypeDef  GPIO_InitStruct;
  6.         __HAL_RCC_GPIOD_CLK_ENABLE();
  7.        
  8.         //--TXD
  9.         GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
  10.         GPIO_InitStruct.Pull  = GPIO_NOPULL;
  11.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  12.         GPIO_InitStruct.Pin = GPIO_PIN_5;
  13.         GPIO_InitStruct.Alternate=GPIO_AF7_USART2;
  14.         HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  15.                 //--RXD
  16.         GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;
  17.         GPIO_InitStruct.Pull  = GPIO_NOPULL;
  18.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  19.         GPIO_InitStruct.Pin = GPIO_PIN_6;
  20.         GPIO_InitStruct.Alternate=GPIO_AF7_USART2;
  21.         HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  22.        

  23. }






  24. void UART_Init(void)
  25. {
  26.         UART_IO_Init();
  27.         __HAL_RCC_USART2_CLK_ENABLE()    ;
  28.   huart.Instance = USART2;
  29.   huart.Init.BaudRate = 115200;
  30.   huart.Init.WordLength = UART_WORDLENGTH_8B;
  31.   huart.Init.StopBits = UART_STOPBITS_1;
  32.   huart.Init.Parity = UART_PARITY_NONE;
  33.   huart.Init.Mode = UART_MODE_TX_RX;
  34.   huart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  35.   huart.Init.OverSampling = UART_OVERSAMPLING_16;
  36.   huart.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  37.   huart.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  38.   huart.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  39.   if (HAL_UART_Init(&huart) != HAL_OK)
  40.   {

  41.   }

  42. }


  43. int fputc(int ch, FILE *f)
  44. {
  45.   HAL_UART_Transmit(&huart, (uint8_t *)&ch, 1, 0xffff);
  46.   return ch;
  47. }
复制代码


完成了串口之后我们就来定时器的操作。
  1. #include "DRV_TIM.h"
  2. #include "DRV_UART.h"


  3. TIM_HandleTypeDef htim1;

  4. void TIM_Init(void)
  5. {
  6.        
  7.   __HAL_RCC_TIM1_CLK_ENABLE();
  8.         htim1.Instance = TIM1;
  9.         htim1.Init.Prescaler = 0;
  10.         htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  11.         htim1.Init.Period = 119;
  12.         htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  13.         htim1.Init.RepetitionCounter = 999;
  14.         htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  15.   if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  16.   {
  17.                
  18.   }
  19.         HAL_TIM_Base_Start_IT(&htim1);
  20.   HAL_NVIC_SetPriority(TIM1_UP_TIM16_IRQn, 2, 0);
  21.   HAL_NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn);
  22. }

  23. int count=0;
  24. void TIM1_UP_TIM16_IRQHandler(void)
  25. {

  26.         if(__HAL_TIM_GET_FLAG(&htim1,TIM_FLAG_UPDATE)!=RESET)
  27.         {
  28.                 count++;
  29.         if(count==1000)
  30.         {
  31.           count=0;
  32.                   LED_Test();
  33.                         printf("Hello STM32L4R9ZI !\r\n");
  34.         }
  35.           __HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);
  36.         }
  37. }
复制代码
完成上面的代码之后,我们经过主函数的调用

  1. #include "stm32l4xx_hal.h"
  2. #include "DRV_LED.h"
  3. #include "DRV_UART.h"
  4. int main(void)
  5. {
  6.   SystemClock_Config();
  7.         HAL_Init();
  8.   LED_Init();
  9.         UART_Init();
  10.   TIM_Init();
  11.   while (1)
  12.   {
  13.                
  14.   }
  15. }
复制代码
整个串口,LED、定时器的测试工作就完成了,我们来看一下具体的效果。

3.png

串口按照1s 的频率来打印串口字符。
两个指示灯也按照1s的频率来闪烁

4.png




收藏 评论3 发布时间:2024-7-30 14:32

举报

3个回答
养乐多 回答时间:2024-10-18 10:29:03
这很基础哈哈
embiied 回答时间:2024-10-18 10:36:59
這不來電高端評測麽
ghost110 回答时间:2024-10-18 10:43:20

细致、全面,对小白很友好!~

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版