ARM三级必过答案simon(DOC)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1-GPIO操作
#define GPIO_Pin_3 ((uint16_t)0x0008)
#define GPIO_Pin_4 ((uint16_t)0x0010)
这里要使用3,4脚,找到路径,在#define GPIO_Pin_1 ((uint16_t)0x0002) #define GPIO_Pin_2 ((uint16_t)0x0004)
下面添加3,4为1时就是0008和0010
1.1.2
#define GPIO_Pin_7 ((uint16_t)0x0080)
#define GPIO_Pin_13 ((uint16_t)0x2000)
同上第7,13位为1
1.1.3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
实现GPIO在推挽模式和输出最大速度为50MHz
1.1.4
STM_EVAL_LEDOn(LED1);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED2);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED3);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED4);
Delay(0xAFFFF);
函数STM_EVAL_LEDOn(LED):实现LED点亮
STM_EVAL_LEDOn(LED1);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED2);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED3);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED4);
D elay(0xAFFFF);
/* Turn off */
STM_EVAL_LEDOff(LED1);
Delay(0xAFFFF);
STM_EVAL_LEDOff(LED2);
Delay(0xAFFFF);
STM_EVAL_LEDOff(LED3);
Delay(0xAFFFF);
STM_EVAL_LEDOff(LED4);
Delay(0xAFFFF);
函数STM_EVAL_LEDOn(LED):实现LED点亮
函数STM_EVAL_LEDOff(LED):实现LED关闭
1.1.6
STM_EVAL_LEDOff(LED3);
Delay(0xAFFFF);
STM_EVAL_LEDOff(LED4);
函数STM_EVAL_LEDOff(LED):实现LED关闭为了看清加个延时1.1.7
STM_EVAL_LEDOff(LED2);
STM_EVAL_LEDOff(LED4);
函数STM_EVAL_LEDOff(LED):实现LED关闭
STM_EVAL_LEDOn(LED3);
Delay(0xAFFFF);
S TM_EVAL_LEDOff(LED3);
Delay(0xAFFFF);
STM_EVAL_LEDOn(LED4);
S TM_EVAL_LEDOff(LED4); 按要求点亮
1.1.9
STM_EVAL_LEDOn(LED1);;
D elay(0xAFFFF);
S TM_EVAL_LEDOff(LED1);
STM_EVAL_LEDOn(LED3);
Delay(0xAFFFF);
S TM_EVAL_LEDOff(LED3);按要求点亮
1.1.10
Delay(0xFFFFFF);
STM_EVAL_LEDOn(LED1);
Delay(0xFFFFFF);
STM_EVAL_LEDOff(LED1);
STM_EVAL_LEDOn(LED3);
STM_EVAL_LEDOff(LED3);按要求点亮
1.2-中断控制器使用方法
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
直接copy下面的TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
1.2.2
NVIC_InitStructure.NVIC_IRQChannel = 28;//考试要求正确修改
Word中tim2是通道28,编译有下面NVIC_IRQChannelPreemptionPriority转到宏定
义有个uint8_t NVIC_IRQChannel;
1.2.3
NVIC_InitStructure.NVIC_IRQChannel = 29;
Word中tim3是通道29,编译有下面NVIC_IRQChannelPreemptionPriority转到宏定义有个uint8_t NVIC_IRQChannel;
1.2.4
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
Word中NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority:优先级配置
1.2.5
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
Word中TIM2拥有抢占优先级0,响应优先级0;TIM3拥有抢占优先级1,响应优先级1;TIM4拥有抢占优先级2,响应优先级0。
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
1.2.6
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
Word里面有两大窜,使其拥有抢占优先级2,响应优先级0
1.2.7
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
1.2.8
/* Enable the USARTy_DMA1_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = 16;
编译进入上面注解USARTy_DMA1_IRQn可以看到使用16通道,前半部分下面有1.2.9
/* Toggle LED3 */
STM_EVAL_LEDToggle(LED3);
Word有个函数STM_EVAL_LEDToggle(LEDx):LEDx状态翻转上面注解有led3
1.2.10
/* Toggle LED32*/
STM_EVAL_LEDToggle(LED2);
Word有个函数STM_EVAL_LEDToggle(LEDx):LEDx状态翻转上面注解有led2
1.3-PWM脉冲宽度调制
printf("PWM Frequency 36KHz\n");
word中已知TIMX3CLK=36MHz,分频系数Prescaler=0,
●TIM3的时钟频率: TIM3 counter clock=TIM3CLK/(Prescaler + 1)。
●TIM3的频率: Frequence=TIM3 counter clock/(TIM3_ARR+1)程序中tim3_arrshi
999,所以最后36khz
1.3.2
printf("PWM Frequency 18KHz\n");
word中已知TIMX3CLK=36MHz,分频系数Prescaler=1,
●TIM3的时钟频率: TIM3 counter clock=TIM3CLK/(Prescaler + 1)。
●TIM3的频率: Frequence=TIM3 counter clock/(TIM3_ARR+1)程序中
tim3_arrshi 999,所以最后18khz
1.3.3
printf("PWM Frequency 12KHz\n");
word中已知TIMX3CLK=36MHz,分频系数Prescaler=2,
●TIM3的时钟频率: TIM3 counter clock=TIM3CLK/(Prescaler + 1)。
●TIM3的频率: Frequence=TIM3 counter clock/(TIM3_ARR+1)程序中
tim3_arrshi 999,所以最后12khz
1.3.4
printf("PC.08:TIM3_CH3 25%\n");
printf("PC.09:TIM3_CH4 12.5%\n"); word
1.3.5
printf("PC.06:TIM3_CH1 12.5%\n");
printf("PC.07:TIM3_CH2 22.5%\n");
printf("PC.08:TIM3_CH3 52.5%\n");
printf("PC.09:TIM3_CH4 60%\n");
1.3.6
/* Channel1 configuration */
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
/* Channel3 configuration */
TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);
/* Channel2 configuration */
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
s tep=1;
}
就是copy上面5的通道3不变,1,2,对换,之后复位step=1;
(213的顺序两行这里通道2两行,3通道TIM_CCx后几个都是Disable)
1.3.7
/* Channel3 configuration */
TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);
/* Channel1 configuration */
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);
/* Channel2 configuration */
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
step++;
}
213的顺序两行这里通道1两行,就是copy上面4的通道2不变,1,3,对换,之后step++;
1.3.8
/* Channel3 configuration */
TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
/* Channel1 configuration */
TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
/* Channel2 configuration */
TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
step++;
}
213的顺序两行这里通道3两行,这里标2,就是通道2,3对换1不变,之后step++;
1.4-ADC模拟数字转换器设计
ADCx->CR1=(uint32_t)0x00000100;
Word中ADC的工作方式为独立模式位19到16为0一共32位即((uint32_t)0x00000000) 使能扫描模式。
位8为1就是0x00000100
1.4.2
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
在独立模式下先编译从下面ADC_ExternalTrigConv_None;转到宏定义区,上面找到独立模式#define ADC_Mode_Independent ((uint32_t)0x00000000)就ok
1.4.3
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;独立模式下转一下就看到了ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;连续执行转换是否使能就好ADC_InitStructure.ADC_NbrOfChannel = 1;且被转换的ADC通道数为1。
1.4.4
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;单次转换
ADC_InitStructure.ADC_NbrOfChannel = 1;
1.4.5
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;连续转换
从ADC_Mode_Independent;转到宏定义区在下面找到对齐方式
#define ADC_DataAlign_Right ((uint32_t)0x00000000)
1.4.6
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;连续转换
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Left;
从ADC_Mode_Independent;转到宏定义区在下面找到对齐方式
#define ADC_DataAlign_Left ((uint32_t)0x00000800)
1.4.7
printf("ADC rusult: %3.2fV\r",(float)(ADCConvertedValue)/0xfff*3.21);
word中数据传输到ADC_ConvertedValue变量中就他
1.4.8
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
程序上面注解/* Start ADC1 Software Conversion */使能ADC1实现模数转换1.4.9
printf("ADCValue: %3.2fV\r",(float)(ADCConvertedValue)/0xfff*3.21);
ADC_ConvertedValue变量中0~3.21V;ADC精度为12位
1.4.10
ADC1,ADC_Channel_16
参数ADCx:ADC序号x
参数ADC_Channel_x:ADC通道x
1.5-DAC模拟数据转换器设计
DAC_InitStructure.DAC_WaveGeneration =DAC_WaveGeneration_Noise;
不知道要填什么,进入DAC_Trigger_Software,找到一个噪声就ok
1.5.2
DAC_SetChannel1Data(DAC_Align_12b_L, 0x7FF0); word中数据为2047时转换16进制就是0x7ff0,后四位保留
1.5.3
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_Triangle;
生成三角波编译进入DAC_Trigger_T2_TRGO;因为类型一样定义就在一起下面有个
#define DAC_WaveGeneration_Triangle 就是三角波
1.5.4
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude =(uint32_t)0x00000A80;
幅值为2047就是位11到位8为1010为A,位7到位6,使能三角波10为8,加起来就是A80
1.5.5
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Escalator8bit;
取寄存器地址前面有个const uint8_t Escalator8bit[6]= {0x0, 0x33,0x66,0x99,0xCC,0xFF};不懂1.5.6
DAC_InitStructure.DAC_WaveGeneration =(uint32_t)0x00000000;
编译,从DAC_Trigger_T6_TRGO;转到定义上面有个
#define DAC_Trigger_None ((uint32_t)0x00000000)
把后面的十六进制填进去就好,连续传输到数据移位寄存器
1.5.7
1,DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits11_0;
word线性反馈移位寄存器LFSR长度为12位编译从下面DAC_Trigger_Software;转到找设置位的,12位就是DAC_LFSRUnmask_Bits11_0;
2,DAC_SetChannel1Data(DAC_Align_12b_L,0x5FF0);
word里面DAC_SetChannel1Data(参数1, 参数2):设置通道1的数据寄存器函数
一般为左对齐就是DAC_Align_12b_L,后一个参数就是0x5FF0
1.5.8
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude =DAC_TriangleAmplitude_2047;
Word中产生2047幅度波,这里波幅就是2047,但不知道怎么写就先编译从下面的DAC_OutputBuffer_Disable;转到宏定义区找到DAC_TriangleAmplitude_2047;
1.5.9
DAC_SetDualChannelData(DAC_Align_12b_R, 0x111, 0x111);
Word中DAC_SetDualChannelData(参数1,参数2,参数3):设置双通道DAC数据函数,后面两个值有VREF*(DHRx / 4095)=VREF/15算出dhrx=273化为十六进制为0x111,还
是直接记住比较好
1.5.10
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bits8_0;
Word移位寄存器LFSR长度为9位从下面DAC_Trigger_Software;转到找宏定义区,9位就是#define DAC_LFSRUnmask_Bits8_0 ((uint32_t)0x00000800)
2.1-SPI串行外设接口设计(温湿度)
SHT75_DAT_L; word中DATA翻转为低电平上面就有SHT75_DAT_L
SHT75_CLK_L; SCK变为低电平上面就有SHT75_CLK_L
sht11_Delay();
SHT75_CLK_H; 随后是在SCK时钟高电平时DATA翻转为高电平
2.1.2
SHT75_DAT_L; DATA翻转为低电平
SHT75_DAT_H; DA TA翻转为高电平word中有
2.1.3
SHT75_DAT_H; SCK变为低电平,随后是在SCK时钟高电平时DATA翻转为高电平SHT75_CLK_H; SCK时钟高电平时DATA翻转为低电平
2.1.4
SHT75_DAT_H;word当SCK时钟高电平时DATA翻转为低电平相反就是高SHT75_CLK_L; 要想翻转,下面有个clkH那这里就必须是_CLK_L;
2.1.5
temp_val|= tmp_byte; 就是把上面CACU_CRC = Table[(CACU_CRC^tmp_byte)]; tmp_byte给这个变量
2.1.6
temp_val |= tmp_byte<<8; temp_val是16位,存放两个8位,先放高8位2.1.7
*t= temp_val; 定义了一个指针取已经采集到的温度
2.1.8
hum_val |= tmp_byte<<8;
程序下面有tmp_byte = s_Read_SHT11_Byte(); //读取高8位
CACU_CRC = Table[(CACU_CRC^tmp_byte)]; //进行第二次CRC
temp_val |= tmp_byte<<8;意思把高8位给hum_val
2.1.9
hum_val |= tmp_byte;
程序下面有tmp_byte = s_Read_SHT11_Byte(); //读取低8位
CACU_CRC = Table[(CACU_CRC^tmp_byte)]; //进行第三次CRC
temp_val |= tmp_byte;
2.1.10
*h =hum_val;
上面有个tmp_byte = s_Read_SHT11_Byte();
CACU_CRC = Table[(CACU_CRC^tmp_byte)]; //进行第三次CRC
hum_val |= tmp_byte; 完成第三次校验就是最终值给指针
2.2内部集成电路IIC接口设计(光照度)
#define EEPROM_WriteAddress1 0x88word中有
#define EEPROM_ReadAddress1 0x88
uint8_t Tx1_Buffer[] = "A STM32F10x I2C Firmware ";第一个字母必需是大写A,后面有个函数会都这个数组的第一个字母就是A了,后面是什么无所谓不会都到
2.2.2
#define EEPROM_WriteAddress1 0x99
#define EEPROM_ReadAddress1 0x99
uint8_t Tx1_Buffer[] = "B ASTM32F10x I2C Firmware ";第一个字母必需是大写B,后面有个函数会都这个数组的第一个字母就是A了,后面是什么无所谓不会都到
2.2.3
#define EEPROM_HW_ADDRESS 0xA0WORD中E0,E1 and E2三个引脚都接地,所以物理地址空间为0XA0
printf("EEPROM PHY ADDRESS:0xA0");
2.2.4
/* Write on I2C EEPROM from EEPROM_WriteAddress1 */
* Read from I2C EEPROM from EEPROM_ReadAddress1 */
I2C_EE_BufferRead(Rx1_Buffer, EEPROM_ReadAddress1, BufferSize1);
I2C_EE_BufferWrite(Tx1_Buffer, EEPROM_WriteAddress1, BufferSize1);上面注释讲实现Tx1_Buffer写操作,copy都操作
I2C_EE_BufferWrite(Tx2_Buffer,EEPROM_WriteAddress2,BufferSize2); 实现Tx2_Buffer写操作
2.2.5
I2C_EE_BufferWrite(Tx1_Buffer, EEPROM_WriteAddress1, BufferSize1);
/* Read from I2C EEPROM from EEPROM_ReadAddress1 */
//考试要求1:I2C_EE_BufferRead(Rx1_Buffer, EEPROM_ReadAddress1, BufferSize1);实现从EEPROM读数据,地址为EEPROM_ReadAddress1,字节数为BufferSize1,赋给变量Rx1_Buffer
I2C_EE_BufferRead(Rx2_Buffer, EEPROM_ReadAddress2, BufferSize2);
2.2.6
I2C_EE_BufferWrite(Tx1_Buffer, EEPROM_WriteAddress1, BufferSize1); 什么题不解释I2C_EE_BufferRead(Rx2_Buffer, EEPROM_ReadAddress2, BufferSize2);
2.2.7
Lux=CalculateLux(GainSetHigh>>4, IntegScal1000, LightIntensity0, LightIntensity1, T); 程序下面直接copy过来
2.2.8
Word中正确实现SlaveAddressVDD 的地址映射
#define SlaveAddressVDD 0x49模仿下面的,word中1001001就是ox49
2.2.9
有个路径:\Address.h。
找不到在左侧light文件右击添加文档,加进来就ok
#define SlaveAddressVDD 0x49
Lux=CalculateLux(GainSetHigh>>4, IntegScal1000, LightIntensity0, LightIntensity1, T);下面有一模一样的
2.2.10
#define SlaveAddressVDD 0x49
Lux=CalculateLux(GainSetHigh>>4, IntegScal1000, LightIntensity0, LightIntensity1, T);程序错误代码全乱了,就是不对,考试不会
2.3-通用同步异步收发机USART设计
115200;
USART_Parity_No;
PUTCHAR_PROTOTYPE
Word中波特率115200,无校验,调用这个函数(没有括号)
复位超级终端设置好会显示
USART Printf Example: retarget the C library printf function to the USART USART Printf Example: hello kitty
2.3.2
9600;
USART_Parity_No;
PUTCHAR_PROTOTYPE
Word中波特率9600,无校验,调用这个函数(没有括号)
复位超级终端设置好会显示
USART Printf Example: retarget the C library printf function to the USART USART Printf Example: hello kitty
2.3.3
57600
USART_Parity_No;
PUTCHAR_PROTOTYPE
Word中波特率9600,无校验,调用这个函数(没有括号)
复位超级终端设置好会显示
USART Printf Example: retarget the C library printf function to the USART USART Printf Example: hello kitty
2.3.4
USART_ART_BaudRate = 115200;
RxBuffer[RxCounter] = (USART_ReceiveData(EVAL_COM1) & 0x7F); 是为了计数在下面函数中printf("%c",RxBuffer[RxCounter++]);
#define RxBufferSize 0xA 要求10个字符转换成十六进制为A
通信成功在电脑上输入十个键值在lcd上面显示出来
2.3.5
USART_ART_Parity = USART_Parity_Odd; 奇校验
if(RxCounter ==NbrOfDataToRead) 判断用==
#define RxBufferSize 0x14 输入20十个键值十六进制为14
通信成功在电脑上输入20个键值在lcd上面显示出来
2.3.6
USART_ART_BaudRate = 115200;
printf("%c",RxBuffer[RxCounter++]); 加一输出下一个键值
#define RxBufferSize 0xf 要求十五个键值
2.3.7
USART_ART_BaudRate = 115200;
//考试要求2,添加一行,用printf语句实现版本号显示
printf("VER:%8.0x\n", version);
word中vs8 EM380C_Get_ver(u32* version) 函数功能:用于获得EM380C的固件版本号,8位
ret = send_cmd(EMSP_CMD_GET_VER, 0, NULL, 0); ver前后呼应,和上面输出的一样2.3.8
USART_ART_BaudRate = 115200;
USART_ART_Parity =USART_Parity_No ;
ret = send_cmd(EMSP_CMD_GET_VER, 0, NULL, 0);
main.c中有printf("VER:%8.0x\n", version);所以要使用ver
2.3.9
USART_ART_BaudRate = 115200;
ret = send_cmd(EMSP_CMD_SCAN_AP, 0, NULL, 0); 发送获取AP命令
printf("%s", APlist_tmp->AP_NAME); 正确输出AP的SSID 号而不是信号2.3.10
printf("VER:%8.0x\n", version); 同上
printf("%s", APlist_tmp->AP_NAME); 输出获得AP的SSID号
free(EM380C_APLst_now); free是c语言中的是释放空间函数,注解里有2.4-Ethernet以太网设计
char const *hosts[1] = {"" };格式没有什么逗号
IP1 192
IP2 168
IP3 0
IP4 120
WORD
2.4.2
char const *hosts[1] = { “”};
IP1 192
IP2 168
IP3 0
IP4 100
WORD
2.4.3
IP1 192
IP2 168
IP3 0
IP4 90
WORD
2.4.4
IP1 192
IP2 168
IP3 0
IP4 78
WORD
2.4.5
#define MCR_LM 0x00001000
#define MCR_DM 0x00000800
#define MCR_IPCO 0x00000400 Word文档中为1,第十二位1000,第一个是零位
2.4.6
#define MCR_TE 0x00000008
#define MCR_RE 0x00000004 Word文档中为1
2.4.7
#define MCR_RE 0x00000004
Word文档中为1 添加ETH_STM32x.h文件
我自己的添加文档tcp_cm3.lib
2.4.8
路径不对,应该是 \TCPnet_examples\Library\Net_Config.c #define HTTP_AUTHPASSW "111111" 在这里添加密码来自word
2.4.9
路径不对,应该是TCPnet_examples\Library\Net_Config.c #define HTTP_AUTHPASSW "111222”在这里添加密码来自word
2.4.10
路径不对,应该是\TCPnet_examples\Library\Net_Config.c #define HTTP_AUTHPASSW "222222" 在这里添加密码来自word
3.1-人机交互应用
case JOY_LEFT: 重要提示
px_o=px;
px-=1;
if(px<0) px=3;
case JOY_RIGHT: 重要提示
px_o=px;
px+=1;
if(px>3) px=0;
上下对调
3.1.2
case JOY_UP: 重要提示
py_o=py;
py-=1;
if(py<0) py=3;
case JOY_DOWN: 重要提示
py_o=py;
py+=1;
if(py>3) py=0;
上下对调
3.1.3
case JOY_UP:
py_o=py;
px_o=px;
if(py) py=0;
else py=1;
case JOY_DOWN:
py_o=py;
px_o=px;
if(py) py=0;
else py=1;
case JOY_LEFT:
py_o=py;
px_o=px;
if(px) px=0;
else px=1;
case JOY_RIGHT:
py_o=py;
px_o=px;
if(px) px=0;
else px=1;
上下为y,左右为x
3.1.4
/* Toggle LD1 */
STM_EVAL_LEDToggle(LED1);
把led4改为led1
3.1.5
if ((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 70) && (TS_State->X > 10))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 150) && (TS_State->X > 90))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 230) && (TS_State->X > 170))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 310) && (TS_State->X > 250))
if ((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 310) && (TS_State->X > 250))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 230) && (TS_State->X > 170))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 150) && (TS_State->X > 90))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 70) && (TS_State->X > 10))
前一半一样后面一半大对调,反过来
3.1.6
if ((TS_State->Y > 205) && (TS_State->Y < 230)&&(TS_State->X < 60) && (TS_State->X > 20))
else if((TS_State->Y > 165) && (TS_State->Y < 190)&&(TS_State->X < 60) && (TS_State->X > 20))
else if((TS_State->Y > 125) && (TS_State->Y < 150)&&(TS_State->X < 60) && (TS_State->X > 20))
else if((TS_State->Y > 85) && (TS_State->Y < 110)&&(TS_State->X < 60) && (TS_State->X > 20))
if ((TS_State->Y > 85) && (TS_State->Y < 110)&&(TS_State->X < 60) && (TS_State->X > 20))
else i f((TS_State->Y > 125) && (TS_State->Y < 150)&&(TS_State->X < 60) && (TS_State->X > 20))
else if((TS_State->Y > 165) && (TS_State->Y < 190)&&(TS_State->X < 60) && (TS_State->X > 20))
else if((TS_State->Y > 205) && (TS_State->Y < 230)&&(TS_State->X <60) &&
(TS_State->X > 20))
后一半一样,前面大对调
3.1.7
if ((TS_State->Y > 120) && (TS_State->Y < 160)&&(TS_State->X < 90) && (TS_State->X > 30))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 180) && (TS_State->X > 120))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 90) && (TS_State->X > 30))
else if((TS_State->Y > 120) && (TS_State->Y < 160)&&(TS_State->X < 180) && (TS_State->X > 120))
if ((TS_State->Y > 120) && (TS_State->Y < 160)&&(TS_State->X < 180) && (TS_State->X > 120))
else if((TS_State->Y > 120) && (TS_State->Y < 160)&&(TS_State->X < 90) && (TS_State->X > 30))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 180) && (TS_State->X > 120))
else if((TS_State->Y > 180) && (TS_State->Y < 220)&&(TS_State->X < 90) && (TS_State->X > 30))
可以先把程序烧进去发现乱了规律然后前一半后一般都不一样的4123
3.1.8
LCD_SetTextColor(Cyan); //考试要求正确修改
LCD_DisplayStringLine(Line5, " LED1 ");
LCD_SetTextColor(Red);
LCD_DisplayStringLine(Line5, (u8*)text);
LCD_SetTextColor(Red);
要求两个地方都把cyan改为Red(来自word),R是大写
3.1.9
LCD_SetTextColor(Cyan); //考试要求正确修改
LCD_DisplayStringLine(Line5, " LED1 ");
LCD_SetTextColor(Blue);
LCD_DisplayStringLine(Line5, (u8*)text);
LCD_SetTextColor(Blue);
要求两个地方都把cyan改为Blue(来自word),B是大写
3.1.10
LCD_SetTextColor(Cyan); //考试要求正确修改
LCD_DisplayStringLine(Line5, " LED1 ");
LCD_SetTextColor(Yellow);
LCD_DisplayStringLine(Line5, (u8*)text);
LCD_SetTextColor(Yellow);
要求两个地方都把cyan改为Yellow(来自word),Y是大写
3.2-RL_FLASH文件系统设计
printf ("\nCmd> "); //考试要求1,请修改代码
fname = get_entry (par, next); //考试要求2,请修改代码
1. printf ("\n CMDST107> "); n一定要小写
2.fname=get_entry(par, &next);
3. SD卡中有以考生准考证号为文件名的TXT文件,且其中有5行内容
烧进去后,打开超级终端按word要求设置好,之后输入FILL 20112621220.TXT 5就ok 3.2.2
printf ("\nCmd> "); //考试要求1,请修改代码
fprintf (f, "This is line # %d in file %s\n", i, fname);
1.:printf ("\n CMDST107> ");
2.fprintf (f, "毛20112621220 \n");
烧进去后,打开超级终端按word要求设置好,之后输入FILL 20112621220.TXT之后
输入TYPE 20112621220.TXT就可以查看文件内容
3.2.3
printf ("\nCmd> "); //考试要求1,请修改代码
1. printf ("\n CMDST107> ");
烧进去后,打开超级终端按word要求设置好,之后输入FILL 20112621220.TXT之后
输入COPY A.TXT20112621220.TXT
3.2.4
1. printf ("\n CMDST107> ");
2.if (frename ( fname , fnew ) == 0)
在下面的printf ("\nDirectory %s renamed to %s\n",fname,fnew);中可以找到fname , fnew
烧进去后,打开超级终端按word要求设置好,之后输入REN A.TXT 20112621220.TXT REN来自word
3.2.5
1. printf ("\n CMDST107> ");
2.fout = fopen (fnew,"w");可在旁边人的3.2.4中copy到
上面有个fin = fopen (fname,"r");
下面有个fout= fopen是c语言中打开文件(fnew,"w")w" 新建一个文本文件,已存在的文件将被删除,只允许写
烧进去后,打开超级终端按word要求设置好,之后输入COPY A.TXT B.TXT
3.2.6
1. printf ("\n CMDST107> ");
2.fin = fopen (fname,"r");
Word中打开指针fname指向的文件fin=fopen(fname , )
"r" 打开一个文本文件,文件必须存在,只允许读
烧进去后,打开超级终端按word要求设置好,之后输入COPY A.TXT B.TXT
1. printf ("\n CMDST107> ");
2. fname
printf ("\nDirectory %s deleted.\n",fname);中有这个,fname是文件代号烧进去后,打开超级终端按word要求设置好,之后输入DEL A.TXT之后输入DIR 查看
3.2.8
1. printf ("\n CMDST107> ");
2.putchar (ch);
上面说指针为ch,putchar是c语言向终端输出函数
超级终端输入TYPE A.TXT
3.2.9
1. printf ("\n CMDST107> ");
2. f = fopen (fname,"w");
打开指针fname指向的文件f = fopen (fname, ); "w"为只读
超级终端输入FILL 20112621220.TXT
3.2.10
1. printf ("\n CMDST107> ");
2. fprintf (f, "毛20112621220\n");
超级终端输入FILL 20112621220.TXT之后输入COPY 20112621220.TXT A.TXT
3.3-RealViewRTX多任务应用(红绿灯)
#define OS_TASKCNT 8 6个基本任务加两个系统任务
(OS_TID t_phaseA; OS_TID t_phaseB; OS_TID t_phaseC; OS_TID t_phaseD; OS_TID t_clock; OS_TID t_lcd; blink.c中数一下是6个)
#define OS_STKSIZE 50 开出来的空间,够用就好,这里用50那就50
#define OS_TICK 10000(时间片大小) ,上面注解里面说是10000
#define OS_TASKCNT 8
#define OS_STKSIZE 50
#define OS_CLOCK 72 000 000 arm最高频率72m
3.3.3
#define OS_TASKCNT 8
#define OS_STKSIZE 50
#define OS_TICK 10000 ,上面注解里面说是10000 3.3.4
t_phaseA= os_tsk_create (phaseA, 0);
t_phaseB = os_tsk_create (phaseB, 0);
从下面t_phaseC = os_tsk_create (phaseC, 0); 中看出
os_sys_init (init); 进入任务时__task void init (void)所以必须进入init 3.3.5
t_phaseB = os_tsk_create (phaseB, 0);
t_phaseC = os_tsk_create (phaseC, 0);
从上面t_phaseA = os_tsk_create (phaseA, 0); 中看出
os_sys_init (init); 进入任务时__task void init (void)所以必须进入init 3.3.6
__task void phaseA (void) {
signal_func (t_phaseC);
__task void phaseB (void) {
signal_func (t_phaseA);
__task void phaseC (void)
signal_func (t_phaseB); 按word中执行顺序为A->C->B->A
3.3.7
__task void phaseA (void) {
signal_func (t_phaseD);
__task void phaseB (void) {
signal_func (t_phaseA);
__task void phaseC (void) {
signal_func (t_phaseB);
__task void phaseD (void) {
signal_func (t_phaseC); 按word中执行顺序为A->D->C->B->A 3.3.8
if (light & red) 红灯开启led3
STM_EVAL_LEDOff(LED3);
LCD_DisplayChar(Line4, 31+5*24, 0x80+1);
STM_EVAL_LEDOn(LED3);
if (light & yellow) 黄灯开启led2
STM_EVAL_LEDOff(LED2);
LCD_DisplayChar(Line5, 31+5*24, 0x80+1);
STM_EVAL_LEDOn(LED2);
3.3.9
if (light & red) { LCD“红灯”亮起时,开启LED3 LCD_DisplayChar(Line4, 31+5*24, 0x80+0);
STM_EVAL_LEDOff(LED3);
LCD_DisplayChar(Line4, 31+5*24, 0x80+1);
STM_EVAL_LEDOn(LED3);
if (light & green) {
STM_EVAL_LEDOff(LED1); LCD“绿灯”亮起时,开启LED
LCD_DisplayChar(Line6, 31+5*24, 0x80+1);
STM_EVAL_LEDOn(LED1);
3.3.10
1,CODEC_Config(OutputDevice_HEADPHONE, I2S_Standard_Phillips, I2S_MCLKOutput_Enable, AUDIO_STREAMING_VOLUME); 直接把说话模式改为耳机HEADPHONE
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);把这句好打开使能ENABLE 2,,找不到点亮灯函数编译一下文档,在上面函数STM_EVAL_LEDInit(LED3);右击of进去找一个函数void STM_EVAL_LEDToggle(Led_TypeDef Led);然后可知道STM_EVAL_LEDToggle(LED2);
STM_EVAL_LEDToggle(LED2);
while (Counter++ < 0x100000);
Counter = 0;
STM_EVAL_LEDToggle(LED3);
Designed by simon。