历史上的今天
今天是:2024年09月10日(星期二)
2019年09月10日 | 串口控制LED点亮stm32中断 跑马灯
2019-09-10 来源:eefocus
/**
@file : main.c
@brief : Main program body
** This notice applies to any and all portions of this file
that are not between comment pairs USER CODE BEGIN and
USER CODE END. Other portions of this file, whether
inserted by the user or by software development tools
are owned by their respective copyright owners.
COPYRIGHT© 2019 STMicroelectronics
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither the name of STMicroelectronics nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/
/ Includes ------------------------------------------------------------------*/
#include “main.h”
#include “stm32f0xx_hal.h”
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
TIM_HandleTypeDef htim14;
UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV /
/ Private variables ---------------------------------------------------------*/
uint8_t n_led = 0x01;
uint8_t v_led = 0x00;
uint8_t led_reg =0x00;
uint8_t aTxBuffer1[4]= “done”;
uint8_t aRxBuffer1[8];
uint8_t flag = 0x00;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM14_Init(void);
/* USER CODE BEGIN PFP /
/ Private function prototypes -----------------------------------------------/
void led_matrix(uint8_t n_led,uint8_t state);
/ USER CODE END PFP */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
@brief The application entry point.
@retval None
/
int main(void)
{
/ 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();
MX_TIM14_Init();
/ USER CODE BEGIN 2 /
HAL_TIM_Base_Start_IT(&htim14);
/ USER CODE END 2 */
/* Infinite loop /
/ USER CODE BEGIN WHILE */
HAL_UART_Receive_IT(&huart1,aRxBuffer1,8); // Enable the USART1 Interrupt
for (uint8_t i = 1; i<9;i++)
{
led_matrix(i,1);
HAL_Delay(50);
}
for (uint8_t i = 8; i>0;i--)
{
led_matrix(i,0);
HAL_Delay(50);
}
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (flag == 0x01)
{
HAL_UART_Transmit(&huart1,aTxBuffer1,4,10); // 接收到数据马上使用串口1发送出去
HAL_UART_Receive_IT(&huart1,aRxBuffer1,8); // 重新使能串口1接收中断
for (int i = 1;i<9;i++)
{
if(aRxBuffer1[i-1] == '1')
led_matrix(i,1);
else
led_matrix(i,0);
}
flag = 0x00;
}
}
/* USER CODE END 3 */
}
/**
@brief System Clock Configuration
@retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
/**Initializes the CPU, AHB and APB busses clocks
*/
1
2
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;
RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
/**Initializes the CPU, AHB and APB busses clocks
*/
1
2
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
/**Configure the Systick interrupt time
*/
1
2
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
/**Configure the Systick
*/
1
2
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/* TIM14 init function */
static void MX_TIM14_Init(void)
{
htim14.Instance = TIM14;
htim14.Init.Prescaler = 800-1;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 10-1;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
}
/* USART1 init function */
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 38400;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
_Error_Handler(FILE, LINE);
}
}
/** Configure pins as
* Analog
* Input
* Output
* EVENT_OUT
* EXTI
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOF, PF0_Pin|PF1_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, Crtl0_Pin|Crtl1_Pin|Crtl2_Pin|Crtl3_Pin
|Crtl4_Pin|Crtl5_Pin|PA8_Pin|H4_Pin
|H3_Pin|H2_Pin|H1_Pin|V2_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, Crtl6_Pin|Crtl7_Pin|V1_Pin|PB4_Pin
|PB5_Pin|PB6_Pin|PB7_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PF0_Pin PF1_Pin */
GPIO_InitStruct.Pin = PF0_Pin|PF1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/*Configure GPIO pins : Crtl0_Pin Crtl1_Pin Crtl2_Pin Crtl3_Pin
Crtl4_Pin Crtl5_Pin PA8_Pin H4_Pin
H3_Pin H2_Pin H1_Pin V2_Pin */
GPIO_InitStruct.Pin = Crtl0_Pin|Crtl1_Pin|Crtl2_Pin|Crtl3_Pin
|Crtl4_Pin|Crtl5_Pin|PA8_Pin|H4_Pin
|H3_Pin|H2_Pin|H1_Pin|V2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : Crtl6_Pin Crtl7_Pin V1_Pin PB4_Pin
PB5_Pin PB6_Pin PB7_Pin */
GPIO_InitStruct.Pin = Crtl6_Pin|Crtl7_Pin|V1_Pin|PB4_Pin
|PB5_Pin|PB6_Pin|PB7_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
/* USER CODE BEGIN 4 */
void led_matrix(uint8_t n_led,uint8_t state)
{
if(state == 0x01)
{
switch (n_led)
{
case 0x01:
led_reg = led_reg|0x01;
break;
case 0x03:
led_reg = led_reg|0x02;
break;
case 0x05:
led_reg = led_reg|0x04;
break;
case 0x07:
led_reg = led_reg|0x08;
break;
case 0x02:
led_reg = led_reg|0x10;
break;
case 0x04:
led_reg = led_reg|0x20;
break;
case 0x06:
led_reg = led_reg|0x40;
break;
case 0x08:
led_reg = led_reg|0x80;
break;
}
}
else
{
switch (n_led)
{
case 0x01:
led_reg = led_reg&0xfe;
break;
case 0x03:
led_reg = led_reg&0xfd;
break;
case 0x05:
led_reg = led_reg&0xfb;
break;
case 0x07:
led_reg = led_reg&0xf7;
break;
case 0x02:
led_reg = led_reg&0xef;
break;
case 0x04:
led_reg = led_reg&0xdf;
break;
case 0x06:
led_reg = led_reg&0xbf;
break;
case 0x08:
led_reg = led_reg&0x7f;
break;
}
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==&htim14)
{
if(v_led == 0x00)
{
HAL_GPIO_WritePin(V1_GPIO_Port, V1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(V2_GPIO_Port, V2_Pin,GPIO_PIN_RESET);
switch (led_reg&0x01)//1
{
case 0x00:
HAL_GPIO_WritePin(H1_GPIO_Port, H1_Pin,GPIO_PIN_SET);
break;
case 0x01:
HAL_GPIO_WritePin(H1_GPIO_Port, H1_Pin,GPIO_PIN_RESET);
break;
}
switch (led_reg&0x02)//3
{
case 0x00:
HAL_GPIO_WritePin(H2_GPIO_Port, H2_Pin,GPIO_PIN_SET);
break;
case 0x02:
HAL_GPIO_WritePin(H2_GPIO_Port, H2_Pin,GPIO_PIN_RESET);
break;
}
switch (led_reg&0x04)//5
{
case 0x00:
HAL_GPIO_WritePin(H3_GPIO_Port, H3_Pin,GPIO_PIN_SET);
break;
case 0x04:
HAL_GPIO_WritePin(H3_GPIO_Port, H3_Pin,GPIO_PIN_RESET);
break;
}
switch (led_reg&0x08)//7
{
case 0x00:
HAL_GPIO_WritePin(H4_GPIO_Port, H4_Pin,GPIO_PIN_SET);
break;
case 0x08:
HAL_GPIO_WritePin(H4_GPIO_Port, H4_Pin,GPIO_PIN_RESET);
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:54 编辑 由于各型号手机所附带的充电器插口不同,以造成各手机充电器之间不能通用。当用户手机充电器损坏或丢失后,无法修复或购不到同型号充电器,使手机无法使用。万能充电器厂家看到这样的商机,就 ...… 查看全部问答> |
|
最近买了个usb接口键盘,老是要重插才能用,按照网上所说把设备管理-》usb room hub-》电源管理-》允许计算机关闭设别以节约电源停掉了。好像也不是qq冲突问题,在qq目录中找不到网上所说的的那两个文件。如果我把液晶显示其关掉,让机器开着, ...… 查看全部问答> |
|
我的发送程序 #include \"vxWorks.h\" #include \"fioLib.h\" #include \"stdio.h\" #include \"unistd.h\" #include \"string.h\" #include \"usrLib.h\" #include \"errnoLib.h\" #include \"hostLib.h\" #include \"sockLib.h\" #incl ...… 查看全部问答> |
|
大家好。本人对于UCOS还是新手。想找UCOS的系统移植到C51上,遇到一些问题。希望大家来帮忙解决一下。 (在网上下载了一个移植实例有些看不太明白) 问题一:实例代码如下 ;定义重定位段 ...… 查看全部问答> |
|
近日小弟准备用两组MC3486/MC3487实现数据通讯,但不知道MC3486/3487该怎么使用,接口电路怎么画?是否需要进行阻抗匹配?是否需要光藕隔离? 还望各位大哥小弟们赐教.谢谢~~~~~… 查看全部问答> |
|
请教:UCOS-II在TI的VC33移植时需要保存和恢复的全部寄存器都是那些、正确顺序是? 我正在研究UCOS-II在TI的VC33移植,但从33资料中确定不了以上问题,请有经验的高手指教,小弟不胜感激啊!! 我对TI公司的DSP(包括2812、c33、2407)的开发都有一定的经验了,欢迎和大家交流,我的的qq号是:61225451。… 查看全部问答> |
|
大家好,碰到一个问题想和大家讨论下,我用的LPC2478芯片内存是64k, 现在想从中分配出一段内存来做缓冲区。要的是绝对地址,和寄存器地址一样的那种。请问如何分配。求指导… 查看全部问答> |




