本帖最后由 传媒学子 于 2020-7-27 00:31 编辑
大赛评奖虽然已经结束,无意间看到还有人关注这个帖子,为此花了一些时间,将一些上述部分内容做了优化。近期,发现一些不太好的现象和不和谐的言论,这里还是希望大家能静下心来,享受技术进步带来的乐趣,不要被社会上部分浮躁的情绪所左右。
回归本项目:
我将在main.c中处理中断1/2的程序换成了EXTI3/4 中断处理,似乎更加稳定。
然后,又用unico将FSM和MLC的.ucf文件合成了一个文件;我的理解.ucf中就是传感器的寄存器配置文件,按照我帖子中提到的方法,可以脱离unico,利用串口写入评测板中。
附件是合成后的.ucf 文件,上传上来,供有缘者参考。
改为中断接收并处理来自评测板的中断源1和中断源2,共三种情形:
stm32f4xx_it.c 中断配置如下:
extern int result;//main.c中定义
void EXTI3_IRQHandler(void)
{
/* USER CODE BEGIN EXTI3_IRQn 0 */
/* USER CODE END EXTI3_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
/* USER CODE BEGIN EXTI3_IRQn 1 */
result=1;
/* USER CODE END EXTI3_IRQn 1 */
}
/**
* @brief This function handles EXTI line4 interrupt.
*/
void EXTI4_IRQHandler(void)
{
/* USER CODE BEGIN EXTI4_IRQn 0 */
/* USER CODE END EXTI4_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);
/* USER CODE BEGIN EXTI4_IRQn 1 */
result=2;
/* USER CODE END EXTI4_IRQn 1 */
}
main.c
while(1)代码如下:
while(1)
{
//case1 Intr1 turn left
//case2 Intr2 turn right
//case3,Intr1 and Intr2, turn around
if(result==1) //case1
{
delay_1ms(1);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == 1)
{
result = 3;
}
else {
value -= 1;
pca9685_set_channel_pwm_times(&handle, 0, 0, 4096*0.5*value/200);
result=0;
}
}
if(result==2)//case2
{
delay_1ms(1);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_3) == 1){
result = 3;
}
else {
value += 1;
pca9685_set_channel_pwm_times(&handle, 0, 0, 4096*0.5*value/200);
result=0;
}
}
if(result==3)
{
//down
pca9685_set_channel_pwm_times(&handle, 2, 0, 4096*0.5*32/200);//down
pca9685_set_channel_pwm_times(&handle, 3, 0, 4096*0.5*40/200);//open claw
delay_1ms(300);
pca9685_set_channel_pwm_times(&handle, 3, 0, 4096*0.5*32/200);//close claw
delay_1ms(300);
pca9685_set_channel_pwm_times(&handle, 2, 0, 4096*0.5*50/200);//up
//pca9685_set_channel_pwm_times(&handle, 3, 0, 4096*0.5*32/200);
result=0;
}
if(value<8)
{
value=53;
}
if(value>53)
{
value=8;
}
}
main.c其它代码如下:
void delay_1ms(int x) //sys_180MHz
{
int j;
while(x--){
j=180000;
while(j--);
}
}
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/*
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3 | GPIO_PIN_4, GPIO_PIN_RESET);
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
*/
/*Configure GPIO pins : PA3 PA4 */
GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI4_IRQn);
}
|