
读字节的时序与程序试对应的

被俺简化后的(对24C02适用):
AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
IIC_Send_Byte(0XA0); //发送器件地址0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr); //发送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}
——回复可见内容——

外部中断的实验
循着正点的《STM32不完全手册》蹒跚前行,实验4 的外部中断实验,涉及到:3个按键(2个定义口不同),4个LED灯(原2个,扩到4个,定义口不同),中断(源、线、程序)。
按键的触发作为中断源,2个LED的变化,是对中断的响应,2个LED作为工作状态指示。
按键的预定义及初始程序
#define KEY0 PFin(11) //PF11 USER BUTTER
#define KEY1 PCin(13) //PC13 Anti-Tamper
#define KEY2 PAin(0) //PA0 WAKE_UP
初始程序#define KEY0 PFin(11) //PF11 USER BUTTER
#define KEY1 PCin(13) //PC13 Anti-Tamper
#define KEY2 PAin(0) //PA0 WAKE_UP
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<4; //使能PORTc时钟
RCC->APB2ENR|=1<<7; //使能PORTf时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入
GPIOF->CRH|=0X00008000;
GPIOF->ODR|=1<<11 ;
GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入
GPIOC->CRH|=0X00800000;
GPIOC->ODR|=1<<13 ;
}
//LED端口定义
#define LED0 PEout(4)// PE4 RED LED (LD5)
#define LED1 PEout(5)// PE5 GREEN LED (LD6)
#define LED2 PEout(2)// PE2 RED LED (LD3)
#define LED3 PEout(3)// PE3 RED LED (LD4)
//LED初始程序
void LED_Init(void)
{
RCC->APB2ENR|=1<<6; //使能PORTE时钟
GPIOE->CRL&=0XFF0000FF;
GPIOE->CRL|=0X00333300;//PE2~5推挽输出
GPIOE->ODR|=0X003c; //PE2~5输出高
}
//中断初始程序
void EXTIX_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<4; //使能PORTC时钟 //
RCC->APB2ENR|=1<<7; //使能PORTF时钟 //
JTAG_Set(JTAG_SWD_DISABLE);//关闭JTAG和SWD
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
// GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
// GPIOA->CRH|=0X80800000;
// GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
// GPIOA->ODR|=1<<15; //PA15上拉
GPIOF->CRH&=0XFFFF0FFF;//PF11设置成输入
GPIOF->CRH|=0X00008000;
GPIOF->ODR|=1<<11 ;
GPIOC->CRH&=0XFF0FFFFF;//PC13设置成输入
GPIOC->CRH|=0X00800000;
GPIOC->ODR|=1<<13 ;
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿触发
Ex_NVIC_Config(GPIO_F,11,FTIR);//下降沿触发 //
Ex_NVIC_Config(GPIO_C,13,FTIR);//下降沿触发 //
// Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发 //
// Ex_NVIC_Config(GPIO_A,15,FTIR);//下降沿触发 //
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,1,EXTI15_10_IRQChannel,2);//抢占2,子优先级1,组2
}
被注解的,是原有的语句,为学习对比,仍保留着
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,115200); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
EXTIX_Init(); //外部中断初始化
LED3=0; //led test
while(1)
{
printf("OK\n");
delay_ms(1000);
LED2=!LED2 ; //闪
LED3=!LED3;
}
}
主程序,只增加了2个LED闪动,交替的闪动,说明运行在主程序的循环里,否则,哈,找原因去吧。(曾利用这点,找到了中断程序中问题:未正确清除中断标志位,而一直处在中断状态,无暇去闪动LED)

JACKWANG帮在EEPW视频平台发布了2段视频:
“sacq”的STM32运行uCGUI演示的视频片段1
"sacq"的STM32运行uCGUI演示的视频片段2
或 http://forum.eepw.com.cn/thread/210625/4#35
回复
打赏帖 | |
---|---|
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 |