欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
STVD Debug時出現報錯flash memory not accessible while core is running
[打印本頁]
作者:
Arouw
時間:
2022-11-7 17:27
標題:
STVD Debug時出現報錯flash memory not accessible while core is running
0.png
(21.76 KB, 下載次數: 26)
下載附件
2022-11-7 17:36 上傳
如圖,使用STVD編寫一個比較簡單的程序,發現按鍵無法完成KEY_Count計數,跳轉不到下一步。
進入Debug后,發現執行程序后會跳出這樣的錯誤,網上找了沒有解決方法,Vcap電容已經核對過是1uF沒有問題。
全部代碼在這里,很亂各位大佬將就看,順便求教哪里寫的不好我改一改!
單片機源程序如下:
//main.c
#include "stm8s.h"
#include "gpio.h"
//定義LED_1引腳
#define LED1_ON GPIOC->ODR &= ~(1<<7)
#define LED1_OFF GPIOC->ODR |= (1<<7)
//定義LED_2引腳
#define LED2_ON GPIOC->ODR &= ~(1<<6)
#define LED2_OFF GPIOC->ODR |= (1<<6)
//定義LED_3 引腳
#define LED3_ON GPIOC->ODR &= ~(1<<5)
#define LED3_OFF GPIOC->ODR |= (1<<5)
//按鍵
#define KEY1 (GPIOD->IDR & GPIO_PIN_4)
#define KEY2 (GPIOD->IDR & GPIO_PIN_5)
//定義UV_LED紫外燈引腳
#define UV_LED_ON GPIOC->ODR |= (0x01<<4)
#define UV_LED_OFF GPIOC->ODR &= ~(0x01<<4)
#define u8 uint8_t
#define u16 uint16_t
u8 Flag =0 ,
Key1_Flag = 0,
Mode_Work = 0,
PWR = 0;
u8 UV_PWR = 0 ;
void Key1_Working(void);
void GPIO_init(void)
{
//LED1 引腳 PC7 配置
GPIOC->DDR |= (0x01<<7);//PC7為輸出模式
GPIOC->CR1 |= (0x01<<7);//PC7推挽輸出
//LED2 引腳 PC6 配置
GPIOC->DDR |= (0x01<<6);//PC6為輸出模式
GPIOC->CR1 |= (0x01<<6);//PC6推挽輸出
//LED3 引腳 PC5 配置
GPIOC->DDR |= (0x01<<5);//PC5為輸出模式
GPIOC->CR1 |= (0x01<<5);//PC5推挽輸出
GPIOD->DDR |= (0x01<<2);//PD2為輸出模式
GPIOD->CR1 |= (0x01<<2);//PD2推挽輸出
GPIOD->DDR |= (0x01<<3);//PD2為輸出模式
GPIOD->CR1 |= (0x01<<3);//PD2推挽輸出
//UV_LED紫外燈引腳 PC4 配置
GPIOC->DDR |= (0x01<<4);//PC4為輸出模式
GPIOC->CR1 |= (0x01<<4);//PC4推挽輸出
//LIGHT_LED照明燈引腳 PC3 配置
GPIOC->DDR |= (0x01<<3);//PC3為輸出模式
GPIOC->CR1 |= (0x01<<3);//PC3推挽輸出
//開機定時按鍵KEY1 引腳 PD4 配置
GPIOD->DDR &= ~(1<<4);//PD4為輸CHU模式
GPIOD->CR1 |= (0x00<<4);//PD4為上拉模式
GPIOD->CR2 |= (0x01<<4);//開外部中斷
}
void SysClkInit( void )
{
// CLK->SWR = 0xe1; //HSI為主時鐘源 16MHz CPU時鐘頻率
CLK->CKDIVR = 0x00; //CPU時鐘0分頻,系統時鐘0分頻
}
void Delay(u16 Count)//延時1*Conut ms
{
u8 i,j;
while(Count--)
{
for(i=0;i<100;i++);
for(j=0;j<50 ;j++);
}
}
void Res_Ctrl(void)
{
UV_LED_OFF;
LED1_OFF;
LED2_OFF;
LED3_OFF;
}
//PWM輸出設置
/***********************************************************
函 數 名: TIM1_PWM_SET
函數描述: TIM1輸出比較功能初始化。
***********************************************************/
void TIM1_PWM_SET(void)
{
TIM1->ARRH = 16000/256;
TIM1->ARRL = 16000%256;
TIM1->CR1 &= 0x8F; //向上計數模式邊沿對齊
TIM1->CR1 |= 0x01; //使能TIM1計數器功能CEN=1
TIM1->BKR = 0x80; //打開主輸出開關輸出PWM信號MOE=1
}
/***********************************************************
函 數 名: CHx_PWM_SET
函數描述: TIM1_CHx通道PWM信號輸出配置〉調節頻率占空比。
參 數: unsigned long F_CHx, 頻率
float Duty_CHx 占空比*100
備 注: 正常占空比參數計算公式為c = Duty_CH3 * F_CH3,
占空比為小數,如0.1、0.2。為線性點亮,占空比擴大100倍,
計算公式改為c = Duty_CH3 * F_CH3 / 100;
***********************************************************/
void CH4_PWM_SET(unsigned long F_CH4,float Duty_CH4)
{
float d;
d = Duty_CH4 * F_CH4 / 100; //計算占空比參數
TIM1->CCR4H = ((u16)(d))/256;
TIM1->CCR4L = ((u16)(d))%256;
TIM1->CCMR4 = 0x60; //配置PWM為模式1
TIM1->CCER2 &= 0x1F; //CC3P=0,OC3信號高電平有效
TIM1->CCER2 |= 0x10; //CC3E=1,使能OC3輸出
TIM1->OISR |= 0x40; //空閑狀態時OC3為高電平
}
復制代碼
作者:
Arouw
時間:
2022-11-7 17:32
void LED_PWM(u16 LED_Flag)
{
int n = 0;
if(LED_Flag==1)
{
for(n=0;n<91;n++) //傳遞占空比參數,m從0~90緩慢點亮
{
CH4_PWM_SET(16000,n);
Delay(500); //為使點亮平緩線性,延遲500ms
}
LED_Flag = 0;
}
if(LED_Flag==2)
{
for(n=91;n>50;n--) //傳遞占空比參數,m從0~90緩慢點亮
{
CH4_PWM_SET(16000,n);
Delay(500); //為使點亮平緩線性,延遲500ms
}
LED_Flag = 0;
}
if(LED_Flag==3)
{
for(n=51;n>20;n--) //傳遞占空比參數,m從0~90緩慢點亮
{
CH4_PWM_SET(16000,n);
Delay(500); //為使點亮平緩線性,延遲500ms
}
LED_Flag = 0;
}
}
void Level1(void)
{
LED1_ON;
LED2_OFF;
LED3_OFF;
LED_PWM(1);
}
void Level2(void)
{
LED1_OFF;
LED2_ON;
LED3_OFF;
LED_PWM(2);
}
void Level3(void)
{
LED1_OFF;
LED2_OFF;
LED3_ON;
LED_PWM(3);
}
void Level4(void)
{
int t;
while(1)
{
for(t=0;t<3;t++)
{
CH4_PWM_SET(16000,20);
Delay(3000);
}
CH4_PWM_SET(0,0);
Delay(30000);
}
}
/***********************************************************
函 數 名: Key1_Working
函數描述: 開機控制按鍵配置
參 數: LED_Count---------LED閃爍次數;
Key1_Flag---------Key1按鍵計數,全局變量;
Flag--------------開關機標志位,全局變量;
備 注: 1、按一次開機,蜂鳴器響兩次,亮電源綠燈;
2、按鍵情況執行:
1)開機;
2)高檔亮度;
3)中檔亮度;
4)低檔亮度;
5)爆閃SOS;
6)關機;
***********************************************************/
void Key1_Working(void)
{
u8 LED_Count = 0 ; //LED閃爍次數
switch(Key1_Flag)
{
case 1://開機,高檔亮度;
Level1();
Flag=1; //開關機標志位為1
break;
case 2://中檔亮度;
Level2();
break;
case 3://低檔亮度;
Level3();
break;
case 4://爆閃SOS;
Level4();
break;
case 5://關機;
Res_Ctrl(); //復位,所有功能關閉
Key1_Flag = 0; //按鍵計數為0
Delay(500);
Flag = 0 ; //開關機標志位為0
break;
default: break;
}
}
void main(void)
{
Res_Ctrl();
GPIO_init();
SysClkInit();
TIM1_PWM_SET();
//EXTI_Init();
while(1)
{
if(KEY1==0) //檢測到KEY1按下
{
Delay(1000); //消抖
Key1_Flag++; //開始按鍵計數
Key1_Working(); //執行Key1控制函數
while(KEY1==0); //若真,則一直進入死循環;若假,則跳過
}
}
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1