cortex-M4核综合实验
1.通过配置开发板LED1/LED2/LED3三盏灯
2.当KEY1/KEY2/KEY3/光电开关/火焰传感器/人体红外中断触发,需要完成以下内容
1)中断触发,在串口工具打印一句话
2)中断触发,对应LED灯状态取反
3.需求:实验中的内容,需要在一个工程下配置,代码编写
usart.h
/* USER CODE BEGIN 0 */
int fputc(int ch,FILE *stream){while(!(huart4.Instance->ISR & (0X1 << 7)));huart4.Instance->TDR=ch;if(ch == '\n'){while(!(huart4.Instance->ISR & (0X1 << 7)));huart4.Instance->TDR='\r';}return ch;
}
/* USER CODE END 0 */
gpio.c
/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */switch(GPIO_Pin){case GPIO_PIN_15://光电开关HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);printf("led3####\n\r");break;case GPIO_PIN_5://火焰HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);printf("led2####\n\r");break;case GPIO_PIN_12:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);printf("led1####\n\r");break;}
}
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */switch(GPIO_Pin){case GPIO_PIN_9:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);printf("led3####\n\r");break;case GPIO_PIN_7:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);printf("led2####\n\r");break;case GPIO_PIN_8:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);printf("led1####\n\r");break;}
}
/* USER CODE END 2 */
cortex-A7核综合实验
实验需求:在串口输入相应的命令,控制对应的硬件进行操作
在串口输入led1on------>板子LED1灯点亮
在串口输入led1off------>板子LED1灯熄灭
在串口输入led2on------>板子LED2灯点亮
在串口输入led2off------>板子LED2灯熄灭
在串口输入led3on------>板子LED3灯点亮
在串口输入led3off------>板子LED3灯熄灭
main.c
#include "led.h"#include "uart4.h"extern void printf(const char *fmt, ...);void delay_ms(int ms){int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 1800; j++);}typedef struct{char cmd_arr[20]; //命令字符串gpio_t *gpiox; //gpio组号unsigned int pin; //对应引脚编号gpio_status_t status; //对应引脚状态void (*gpio_write)(gpio_t *gpiox, unsigned int pin, gpio_status_t status);} cmd_t;cmd_t arr[6] = {[0] = {.cmd_arr = "led1on",.gpiox = GPIOE,.pin = GPIO_PIN_10,.status = GPIO_SET_T,.gpio_write = hal_gpio_write,},[1] = {.cmd_arr = "led1off",.gpiox = GPIOE,.pin = GPIO_PIN_10,.status = GPIO_RESET_T,.gpio_write = hal_gpio_write,},[2] = {.cmd_arr = "led2on",.gpiox = GPIOF,.pin = GPIO_PIN_10,.status = GPIO_SET_T,.gpio_write = hal_gpio_write,},[3] = {.cmd_arr = "led2off",.gpiox = GPIOF,.pin = GPIO_PIN_10,.status = GPIO_RESET_T,.gpio_write = hal_gpio_write,},[4] = {.cmd_arr = "led3on",.gpiox = GPIOE,.pin = GPIO_PIN_8,.status = GPIO_SET_T,.gpio_write = hal_gpio_write,},[5] = {.cmd_arr = "led3off",.gpiox = GPIOE,.pin = GPIO_PIN_8,.status = GPIO_RESET_T,.gpio_write = hal_gpio_write,},};//字符串比较函数int strcmp(const char *str1, const char *str2){while (*str1 && *str2 && *str1 == *str2){str1++;str2++;}return *str1 - *str2;}//查找命令的cmd_t *find_cmd(const char *buffer){int i;for (i = 0; i < 6; i++){if (strcmp(arr[i].cmd_arr, buffer) == 0){return arr + i;}}return 0;}int main(){//LED123灯初始化hal_init_led123();//UART初始化hal_uart_init();char buf[50];int len = 50;while (1){hal_recv_string(buf, len); //用来接收串口工具输入的字符串cmd_t *p = find_cmd(buf);if (p == 0){printf("cmd not found\n\r");}else{p->gpio_write(p->gpiox, p->pin, p->status);}}return 0;}