顺便答疑群里有提问,[忘了是谁],程序完全可以替换掉Bootloader.这几天又研究了一下原子哥的DFU升级什么的.
里面虽然是一个标准的芯片,但是分了几个区段.
- 0x08000000 - 0x08003FFF 是Bootloader,可以改,调试时候不推荐改.
- 0x08004000 - 0x0800BFFF 是OTA信息.
- 0x0800C000 - 0x08060000 是用户自由分配程序区段.
- 0x08060000 - 0x080C0000 是OTA时候的储存空间.
- 0x080C0000 - 0x080FFFFF 射频驱动程序,不能改哦.
那么说,其实在忽略了Bootloader的前提下,我们可以获得更多的空间,我们暂时认为是一个独立的芯片.我们拿到了一块MX1081评估板,但是臃肿的结构,我表示很不满.所以我就建立一个新的工程,现在干净一些,也是为了后来更好查BUG.芯片选STM32F215RG,全局预定义是EMW3161 USE_STDPERIPH_DRIVER.对我日后有用的,都试试.
- ADC实验从PA6读取模拟的数值,然后采样,串口发送,DMA方式,还控制LED灯闪烁,PA6对应外部模块的第一个旋钮.
- 按键实验中,按键的短路帽默认是插上了,但是按键好像没想象中好使.
- I2C测试是把I2C插在I2C1上,I2C的实现方式是查询法!
- USB实验例子说的是HID
当然,这只能当是普通MCU,重点是他里面有个WIFI内核,支持AP和Station模式,可以做DHCP客户端或者DHCP服务器,整个MCU的射频内核的操作大概是:
3,4是不断循环执行的,3就是射频内核需要处理自己的一些事,比如看看Wifi状态什么的.所以,主程序结构里面不宜太久才调用一次mxchipTick.
在程序刚进入时候,mxchipInit,进行初始化,一般都会成功.然后配置参数,并初始化,一般情况如下:
void softAPModeStart(void){ memset(&wNetConfig, 0x0, sizeof(network_InitTypeDef_st)); wNetConfig.wifi_mode = Soft_AP; strcpy((char *)wNetConfig.wifi_ssid, "uAP"); strcpy((char *)wNetConfig.wifi_key, ""); strcpy((char *)wNetConfig.local_ip_addr, "192.168.0.1"); strcpy((char *)wNetConfig.address_pool_start, "192.168.0.10"); strcpy((char *)wNetConfig.address_pool_end, "192.168.0.177"); wNetConfig.dhcpMode = DHCP_Server; StartNetwork(&wNetConfig); printf("Setup soft AP: %s\r\n", wNetConfig.wifi_ssid);} 当然也可以初始化成Station:
void stationModeStart(void){ memset(&wNetConfig, 0x0, sizeof(network_InitTypeDef_st)); wNetConfig.wifi_mode = Station; strcpy((char *)wNetConfig.wifi_ssid, AP_NAME); strcpy((char *)wNetConfig.wifi_key, AP_PASSWORD); wNetConfig.dhcpMode = DHCP_Client; StartNetwork(&wNetConfig); printf("connect to %s.....\r\n", wNetConfig.wifi_ssid);} 然后在里面该怎么就怎么.比如DNS,就gethostbyname,这样说起来,其实做得还不错的,简化了很多开发步骤.